Rolf B: array ABFRAGE in PDO SELECT Anfrage

Beitrag lesen

Hallo taisön,

der von Dir gepostete Code passt nicht, da sind Anführungszeichen falsch. Das ." am Ende der prepare-Zeile erzeugt das Problem. Aber ich gehe davon aus, dass das beim Kopieren hierher passiert ist, sonst hättest Du ganz andere Fehlermeldungen.

Was auch nicht passt, ist dein SQL-Statement. Du müsste a.* schreiben, nicht a*.

Für den Fehler interssanter ist aber:

  • was steht in den Zeilen 29 und 529 von suche.php

Das ist eigentlich das wichtigste: welches Statement genau ist es, das den Fehler wirft. Diese Information enthältst Du uns vor.

Und was bei solchen generierten SQLs auch immer wichtig ist:

  • wie sieht das generierte SQL Statement aus

Meine Hypothese ist der result-Teil deines Arrays, da wird garantiert was nicht funktionieren. PHP ersetzt Variablen nur in Strings, die in "doppelten" Anführungszeichen stehen, und die Ersetzung findet genau dann statt, wenn dieser String benutzt wird. In deinem Fall wäre das das Erstellen des $suche-Arrays, wenn der String denn in doppelten Anführungszeichen gestanden hätte.

Die String-Auflösung in "$suche[0]['result']" funktioniert so übrigens gar nicht, das ist ein zweistufiger-Arrayzugriff, den kann die einfache Syntax des String Parsing nicht, da brauchst Du die komplexe Syntax: "{$suche[0]['result']}". Das hilft im konkreten Fall jedoch nicht weiter, weil Du für den Execute-Parameter ein Array brauchst, wo der Schlüssel der Placeholder ist (also ':eingabe', incl. des Doppelpunkts) und der Wert ist der zu übergebende Wert.

Du könntest dein Suche-Array so erzeugen:

$suche[] = array(	'select' => 'a.id =:eingabe',  
					'result' => array(':eingabe' => $eingabe));		

Das setzt aber voraus, dass Du $eingabe in dem Moment zur Verfügung hast, wo Du das suche-Array aufbaust.

Mit diesem Suche-Array hast Du das nötige Array für execute sofort fertig und kannst dann bei der SQL-Abfrage schreiben:

$statement = $pdo->prepare("SELECT a.* FROM table a WHERE ".$suche[0]['select']);
if ($statement === FALSE) {
   // Fehlerbehandlung für prepare
}
if (!$statement->execute($suche[0]['result'])) {
   // Fehlerbehandlung für execute
}

Rolf

--
sumpsi - posui - clusi