2012-04-01 9 views
0
$data = $mysqli->prepare("SELECT amount FROM items WHERE id=:id"); 
echo 'forward1'; 
if(!$data->execute(array(':id' => $id))) 
    die("error executing".$data->error); 
echo '2'; 
$row = $data->fetch_object(); 
die('Losing my mind'.$row->amount); 

Dies wird nur echo "forward1", nicht "error functional ..." oder "2". Es arbeitet mit * $ mysqli-> query“Wenn ich Anführungszeichen hinzufügen‚‘auf. ID in der Abfrage, wird es echo‚forward1error Ausführung‘Aufruf vorbereiten mit mysqli wird nicht Daten holen

+0

das ist normal .... – dynamic

Antwort

1

Stellen Sie zuerst sicher, dass Sie die vorbereiteten Anweisungen Syntax und Arbeitsmodell verstehen.

Wie in:

$data = $mysqli->prepare("SELECT amount FROM items WHERE id=(?)"); 
      // THIS ^^ actually "prepares" an object to be used in the statement 
$data->bind_param("i",$id) 
      // ...then you "bind" the parameter for your statement as "i"(nteger) 
echo 'forward1'; 
if(!$data->execute()) // And now you simply run it, with no other args 
    die("error executing".$data->error); 
echo '2'; 
$row = $data->fetch_object(); 
die('Loosing my mind'.$row->amount); 

Ich schlage vor, obwohl mehr etwas mit wie

$data->execute() or die("error executing".$data->error); 

Die wichtigsten Schritte einer vorbereiteten Erklärung sind: 1. Bereiten Sie die Abfrage mit einigen Platzhalter Werten; 2. "Binden" die erforderliche Anzahl von Werten an die Abfrage; 3. Führen Sie es aus!

Ich verstehe nicht, warum das in Ihrem Fall mit einer so einfachen Abfrage relevant ist. Ich nehme auch an, dass du es wirklich für etwas Größeres brauchst. Bitte lassen Sie mich wissen, wenn ich Ihren Punkt oder Codebeispiel missverstanden habe.

Oh, und .. viel Spaß! :-)

+0

Danke, nach dem Schlafen scheint alles klar. Ich weiß nicht, woher ich die Idee hatte, dass ich args in execute verwenden könnte, ich war mir so sicher darüber und seiner Syntax. – Kahunar

+0

In den letzten paar Tagen hatte ich Probleme, eine MySQL-Anfrage zu bekommen, und ich ging nach 4-5 verschwendeten Stunden ins Bett. Ich wachte 5 Stunden später auf und löste das Problem in ~ 10 Minuten. Es ist ein häufiges Problem, keine Sorge. 'Die Macht sei mit dir!' –

0

Schalten Sie die Fehlerberichterstattung

Sie erhalten eine tödlich.. Fehler, der durch die Methode Zugriff auf execute auf mysqli :: Erklärung nach gescheiterter prepare Überprüfen Sie, ob $data === false vor execute Aufruf

Fehlermeldung:.. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':id' at line 1

sehen Sie diese Antwort, warum dieser Fehler ausgelöst wird: MYSQLI::prepare() , error when used placeholder :something

Sehen Sie die PHP manual zur Verwendung von mysqli oder verwenden Sie stattdessen PDO.

+0

Vielen Dank, ja ich werde es tun! $ data hat in der prepare-Anweisung keinen falschen Wert erhalten, da ich es auch überprüft habe. Ich weiß nicht warum. Danke auch für die Links! – Kahunar

+0

Nur für den Rekord: Ich nahm an, dass Sie 'mysqli' verwenden, da Ihre Variable' $ mysqli' heißt. Auf der anderen Seite schlagen Ihre Befehle vor, dass Sie tatsächlich PDO verwenden möchten. Benannte Parameter sind nur in PDO verfügbar. Bitte prüfen Sie, ob Sie die richtige Erweiterung verwenden, da sich diese beim Erstellen und Ausführen von Anweisungen unterscheiden. – Basti