• Moin Moin zusammen,


    Ich habe eine Abfrage wie folgt:



    Soweit auch, jetzt zu meinem Problem.

    Ich weiß nicht wie ich das Array

    Code
    1. $seite = 'wasweissich.de';

    binde ohne eine Wert Angabe. Also ohne das ich diesen Wert eingeben muss, denn der soll aus meiner Datenbank abgeholt werden.

    Ich weiß leider nicht wonach ich suchen soll. Vielleicht könnte mir jemand weiterhelfen wonach ich suchen muss soll.

  • Im Netz suchst Du einfach nach "php pdo".

    https://www.php.net/manual/de/book.pdo.php

    https://www.php.net/manual/de/pdo.prepared-statements.php


    bindParam

    Code
    1. $stmt->bindParam('seite', $seite);

    brauchst Du nicht.

    Kann man nutzen, muss man aber nicht. Ich find es verwirrend und "ekelhaft". Kann aber in bestimmten Fällen Sinn machen.

    Ansonsten so, wie Du es geschrieben hast.


    Würde allerdings eine while-Schleife nutzen, falls es viele Zeilen seinen können.

    Code
    1. while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    2. // do something with $row['...']
    3. }

    Mit fetchAll bekommst Du alle Zeilen in eine Variable.

    Wenn es zu viele sind, könnte es ein "out of memory" geben.

    Mit der while-Schleife hast Du immer nur eine Zeile in der Variable.


    1. while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    2. // do something with $row['...']
    3. }


    jetzt bekomme ich die Abfrage und in der while Schleife wird mir ja alles ausgeben.

    Mein Problem ist ja aber. In Zeile 1 habe ich ein Array definiert. $seite = 'wasauchimmer';,

    Danach wird gesucht und wird mir auch das Ergebnis angezeigt, soweit auch gut. wenn ich nur ein wert habe ist das ok. in der Datenbank gibt es immer mehrere Spalten die gefüllt sind, und die kann man doch nicht Händisch da oben eintragen. Sorry ich weiß nicht wie ich es besser ausdrücken soll.

  • Ach, jetzt verstehe ich die Array-Sache (glaub ich).


    Du hast einen, oder mehrere Seiten, nach denen gesucht werden soll?

    Dann nutzt man

    SQL
    1. WHERE seite = IN(:a, :b, :c)


    Da Du aber evtl nicht weißt, wie viele Values (Seiten) abgefragt werden,

    musst Du die Platzhalter (:a, :b, :c) dynamisch erstellen.


    Info:

    Jetzt könnte man ja meinen, dass man einen Platzhalter angibt

    SQL
    1. WHERE seite = IN(:seiten)

    und bei execute ein array übergibt

    PHP
    1. $stmt->execute([
    2. 'seite' => [ // invalid example!
    3. 'foo.com',
    4. 'bar.com',
    5. 'baz.com',
    6. ]
    7. ]);

    Aber das funktioniert nicht.

    Die Parameter sind immer key => value (Platzhalter string => value)

    Siehe: PDO::PARAM_* https://www.php.net/manual/de/pdo.constants.php

    Es gibt kein PDO::PARAM_ARRAY.


    /endInfo



    Also erstellen wir dynamisch n parameter zu einem Kommagetrennten String:


    Sicherheit (Thema SQL-Injection): Zwar nutzen wir hier eine PHP Variable in der SQL query,

    aber wir wissen genau, dass in dem erstellten String keine Userdaten enthalten sind.

    Es sind immer die von uns selbst erstellten Platzhalter: ":value_1, :value_2, ..."