Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Prepared Statements Abfrage

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Shen
    hat ein Thema erstellt [Erledigt] Prepared Statements Abfrage.

    [Erledigt] Prepared Statements Abfrage

    Hallo,
    ich versuche mit prepared Statements eine Datenbank-Abfrage zu machen:

    PHP-Code:
    $testdb = new MySQLi($hostname$username$passwd$dbname$port$socket);

        
    $prepare $testdb->prepare("SELECT COUNT(FrageNr) FROM kat_fragen_?");
        
    $prepare->bind_param('s'$tabelle);
        
    $tabelle 'tabelle';
        
    $prepare->execute();
        
    $prepare->bind_result($tabelle);
        echo 
    $prepare->fetch(); 
    Die Variable soll die Tabelle "kat_fragen_" mit einem String am Ende ergänzen.

    Ich erhalte jedoch immer die Fehlermeldung:
    Call to a member function bind_param() on a non-object in ....

    Hat jemand eine Idee, wie das zu lösen ist?

  • Shen
    antwortet
    Okay, das sind unschlagbare Argumente
    Gut, dass ich hier noch einmal vorbei geschaut habe. Dann werde ich das noch mal überarbeiten.

    Zitat von Flor1an Beitrag anzeigen
    Und was du mit deiner DB Abfrage meinst weiß ich nicht. Für Parameter die z.b. in der WHERE KLausel stehen sind bind_params schon geeignet!
    Das war quasi die Antwort auf meine Frage

    Danke sehr!

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Normalisierung hat viele Vorteile. Du musst nicht x Tabellen verwalten die alle das selbe Schema haben (änderst du bei einer Tabelle ne Spalte musst du das bei allen anderen Tabellen auch machen, bei nur einer Tabelle hast du da leichtes Spiel).

    Stell dir vor du möchtest alle Fragen zählen, was machst du bei x Tabellen? X Abfragen wo du jeweils die Anzahl zählst und diese dann zusammen zählst ... bei einer Tabelle reicht eine Abfrage. Und so gibt es noch viel mehr Beispiele ...

    Von daher mach es in eine Tabelle und erstell noch eine 3te in der die einzelnen Kataloge stehen und jede Frage/Antwort bezieht sich dann auf einen Katalog. Bzw. wenn du in eine Frage in mehreren Katalogen haben möchtest geht das auch, du hast also so keine doppelten Fragen mehr in der DB stehen.

    Und was du mit deiner DB Abfrage meinst weiß ich nicht. Für Parameter die z.b. in der WHERE KLausel stehen sind bind_params schon geeignet!

    Einen Kommentar schreiben:


  • Shen
    antwortet
    Ja, ich habe pro Fragenkatalog eine Tabelle für die Fragen und eine für die Antworten.
    Ist also eine große Tabelle sinnvoller, insbesondere bezogen auf den Ressourcenverbrauch das Auslesen?
    Unübersichtlicher wird es meines Erachtens dadurch schon. Aber vielleicht habe ich auch zu sehr das Ordner-Schema im Kopf

    Und es ändert nichts an der grundlegenden Frage, ob
    PHP-Code:
    $katalog 'name'
    $prepare $testdb->prepare("SELECT COUNT(FrageNr) FROM fragen where katalog =$katalog"); 
    mehr Sinn macht, insbesondere bezogen auf sql-injections (oder ist das hier nicht relevant?)

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Schau dir mal das Thema "Datenbank Normalisierung" an. Du solltest auf jeden Fall nicht mehrere Tabellen haben die Daten vom selben Typ speichern. Bei dir hast du anscheinend mehrere Tabellen die alle Fragen speichern. Das kannst du auch mit einer einzigen Tabelle erreichen.

    Einen Kommentar schreiben:


  • Shen
    antwortet
    Zitat von Flor1an Beitrag anzeigen
    Vlt. solltest du erst $tabelle definieren und dann $tabelle nutzen?

    Und im übrigen wenn du dynamische Tabellennamen hast dann sieht das sehr stark nach einem falschen Datenbankdesign aus! Das solltest du dann unbedingt korrigieren bevor du weiter arbeitest.
    Also meinst du in etwa so etwas?

    PHP-Code:
    $tabelle 'name';
    $prepare $testdb->prepare("SELECT COUNT(FrageNr) FROM kat_fragen_$tabelle"); 
    Könntest du das mit dem falschen Datenbankdesign etwas erläutern?

    Einen Kommentar schreiben:


  • Flor1an
    antwortet
    Vlt. solltest du erst $tabelle definieren und dann $tabelle nutzen?

    Und im übrigen wenn du dynamische Tabellennamen hast dann sieht das sehr stark nach einem falschen Datenbankdesign aus! Das solltest du dann unbedingt korrigieren bevor du weiter arbeitest.

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    Mit bind-param kannst du meines wissens nach die Tabelle nicht ergänzen.
    Das ist nur dafür gedacht, dass man Paramterlisten ersetzen kann. Weil diese dann auch escaped werden.

    Einen Kommentar schreiben:

Lädt...
X