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

  • [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?

  • #2
    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.
    "My software never has bugs, it just develops random features."
    "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

    Kommentar


    • #3
      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.

      Kommentar


      • #4
        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?

        Kommentar


        • #5
          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.

          Kommentar


          • #6
            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?)

            Kommentar


            • #7
              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!

              Kommentar


              • #8
                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!

                Kommentar

                Lädt...
                X