1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

SQL Abfrage mit mehreren Werten einer WHERE Klausel

Dieses Thema im Forum "PHP" wurde erstellt von nchristoph, 17. Oktober 2016.

  1. nchristoph

    nchristoph Erfahrenes Mitglied

    Hallo Zusammen,

    folgendes Problem.

    Wie kann ich eine WHERE Klausel in PHP mit mehreren Werten erstellen?

    Mein Code schaut so aus:

    PHP:
    1. $suchbegriff = str_replace(" ", "", $_POST["suchbegriff"]);
    2.     $sql = ( "SELECT
    3.                ID,
    4.                Holzart,
    5.                Klasse,
    6.                Trockenheit,
    7.                Partie,
    8.                Starke,
    9.                Pfad,
    10.                DATE_FORMAT(Datum,'%d.%m.%Y')AS Datum,
    11.                DATE_FORMAT(anderungsdatum,'%d.%m.%Y')AS anderungsdatum
    12.            FROM
    13.                suchmaschine
    14.            WHERE
    15.                Partie LIKE :suchbegriff
    16.            ORDER BY
    17.                Holzart, Starke, Klasse, Partie  ASC");
    18.      
    19.     include('../templates/suche/sucheheader.tpl');
    20.     $stmt = $db_conn->prepare($sql);
    21.     $stmt->bindValue(':suchbegriff', "%{$suchbegriff }%", PDO::PARAM_STR);
    22.     $stmt->execute();
    Funktioniert soweit so gut. Sobald ich allerdings ein OR Holzart LIKE :suchbegriff hinschreibe, kommt folgender Fehler:

    Ich habe in den Verbindungseinstellungen die Emulierten Prepares abgeschaltet und lt. dem, was ich im Internet gefunden habe, hängt das damit zusammen.

    Meine Fragen:
    - Wie mache ich mehrere Werte bei der WHERE Klausel das meine Abfrage wieder funktioniert?
    - Bringt das Abschalten von Emulate Prepares wirklich so viel, das sicher die Arbeit mit dem umschreiben lohnt?

    mfg
    Christoph.
     
  2. vfl_freak

    vfl_freak Premium-User

  3. nchristoph

    nchristoph Erfahrenes Mitglied

    Danke für die Antwort.

    Leider kommt auch mit Klammern derselbe Fehler.

    Einen Workaround habe ich gefunden:

    PHP:
    1.     $suchbegriff = str_replace(" ", "", $_POST["suchbegriff"]);
    2.     $suchbegriff1 = str_replace(" ", "", $_POST["suchbegriff"]);
    3.     $sql = ( "SELECT
    4.                ID,
    5.                Holzart,
    6.                Klasse,
    7.                Trockenheit,
    8.                Partie,
    9.                Starke,
    10.                Pfad,
    11.                DATE_FORMAT(Datum,'%d.%m.%Y')AS Datum,
    12.                DATE_FORMAT(anderungsdatum,'%d.%m.%Y')AS anderungsdatum
    13.            FROM
    14.                suchmaschine
    15.            WHERE
    16.                Holzart LIKE :suchbegriff OR
    17.                Partie LIKE :suchbegriff1
    18.            ORDER BY
    19.                Holzart, Starke, Klasse, Partie  ASC");
    20.      
    21.     include('../templates/suche/sucheheader.tpl');
    22.     $stmt = $db_conn->prepare($sql);
    23.     $stmt->bindValue(':suchbegriff', "%{$suchbegriff}%", PDO::PARAM_STR);
    24.     $stmt->bindValue(':suchbegriff1', "%{$suchbegriff1}%", PDO::PARAM_STR);
    25.     $stmt->execute();
    Aber das muss doch schöner gehen oder?

    mfg
    Christoph
     
  4. Fragenfrager

    Fragenfrager Erfahrenes Mitglied

    Aus meiner Sicht sieht es gut aus.
    Funktioniert es denn, wenn Du den Befehl direkt gegen die Datenbank schickst, also mit eingetragenen Parameter direkt im SQL?
    Ich kenne mySQL nicht so gut, aber unter MSSQL müsst es sein:
    ..WHERE (Holzart LIKE ('%BUCHE%') AND Partie LIKE ('%4711%'))
    Die Hochkommata sind zu beachten.
     
  5. nchristoph

    nchristoph Erfahrenes Mitglied

    Ich habe den Code etwas bereinigt damit die Felder, welche nicht benötigt werden nicht durchsucht werden.

    Wenn ich den Code direkt ausführe, ohne Platzhalter sondern direkt mit werten, funktioniert es mit einem Wert in der Where Klausel schon, mit 2 kommt wieder der Fehler.

    Mich beschleicht der Gedanke, das mit den zwei Werten bei Where Klauseln mit abgeschalteten Emulated Prepares nicht funktioniert ausser man macht 2 Platzhalter.

    Leider habe ich aktuell keinen Zugriff auf PHPMyAdmin bzw. Konsole dass ich das direkt in MySql ausführen kann.
     
Die Seite wird geladen...