2013-04-01 4 views
8

Ich versuche, den folgenden Code arbeiten zu lassen, aber ich kann die execute() Zeile nicht erreichen.Wie führe ich die bind_param() Anweisung in PHP aus?

$mysqli = $this->ConnectLowPrivileges(); 
echo 'Connected<br>'; 
$stmt = $mysqli->prepare("SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?"); 
echo 'Prepared and binding parameters<br>'; 
$stmt->bind_param('i', 2); 
echo 'Ready to execute<br>' 
if ($stmt->execute()){ 
    echo 'Executing..'; 
    } 
} else { 
    echo 'Error executing!'; 
} 
mysqli_close($mysqli); 

Die Ausgabe, die ich erhalte, ist:

Connected 
Prepared and binding parameters 

Also das Problem sollte sein in Zeile 5, aber die Überprüfung der manual of bind_param() Ich kann keine Syntaxfehler dort finden.

+3

Warum Echo nicht den Fehler erhalten, um zu helfen, es zu debuggen? Ich denke, das Widerhallen von '$ stmt-> error' wird Ihnen den genauen Fehler liefern, über den sich mysql beschwert. – Todd

+0

Ich habe meine Frage aktualisiert, weil ich jetzt nicht einmal die folgende Zeile nach 'bind_param()' ausführen kann! @ Todd Das ist nützlich, wichtig im Auge zu behalten. – Lucio

Antwort

11

Wenn Parameter Bindung Sie eine Variable übergeben müssen, die als Referenz verwendet wird:

$var = 1; 

$stmt->bind_param('i', $var); 

das Handbuch Siehe: http://php.net/manual/en/mysqli-stmt.bind-param.php

Beachten Sie, dass $var nicht wirklich definiert werden müssen, es binden . Im Folgenden ist perfekt gültig:

$stmt->bind_param('i', $var); 

foreach ($array as $element) 
{ 

    $var = $element['foo']; 

    $stmt->execute(); 

} 
+2

+1, Erstaunlich, haben Sie irgendeine Referenz für diese Tatsache? Das habe ich nie gelernt :) –

+0

Ja, habe den Link zu meiner Antwort hinzugefügt. – MichaelRushton

+0

Tnx !!! Ich hatte das gleiche Problem wie für 3 Stunden .... –

-6

Ihr Problem ist nicht in Zeile 5, sondern in Zeile 1.
Sie versuchen unbrauchbar Treiber zu verwenden.
Während PDO genau das tut, was Sie wollen.

$sql = "SELECT `name`, `lastname` FROM `tblStudents` WHERE `idStudent`=?" 
$stm = $this->pdo->prepare($sql); 
$stm->execute(array(2)); 
return $stm->fetch(); 

Nachdem alle Jahre vergangen, seit dieser Antwort geschrieben wurde, entstand eine neue PHP-Funktion, genannt „Argument Auspacken“. So, 5.6 ab Version können Sie einen Wert in bind_param passieren:

$stmt->bind_param('i', ...[2]); 

Aber noch haben Sie eine Mühe mit Ihren Daten immer wieder aus einer vorbereiteten Erklärung :)

+0

Wenn es unbrauchbar ist, warum gibt es Software da draußen gebaut, funktioniert wie erwartet? –

+0

weil Leute es unverblümt als alte mysql ext verwenden, ** behält alle Nachteile und Unsicherheit ** –

+0

Nachteile und Unsicherheit, stimme ich zu. "Unbrauchbar" ist etwas ganz anderes. –

-1

hier ist es nur ein einfaches explaination
deklarieren Sie eine Variable zu bind

$var="email"; 
$mysqli = $this->ConnectLowPrivileges(); 
echo 'Connected<br>'; 

$var="email"; 
$stmt = $mysqli->prepare("SELECT name, lastname FROM tablename WHERE idStudent=?" LIMIT=1); 
echo 'Prepared and binding parameters<br>'; 
$stmt->bindparam(1,$var);