2017-02-03 2 views
2

Ich habe eine SQL-Anweisung zu aktualisieren, bestätigen Sie Code und Code in der Datenbank. Ich verwende bind param, um die Variablen zu binden. Es funktionierte gut für meine Auswahl und Einfügen von SQL-Anweisungen. Allerdings gibt es immer wieder diesen Fehler:Update sql mit Bind param

Fatal error: Uncaught Error: Call to a member function bind_param() on boolean

wenn ich versuchte, die Update-Abfrage auszuführen. Ich habe versucht, in jedem Forum zu suchen, fand aber keine Antworten und ich hoffe, dass jemand meinen Fehler entdecken könnte. Ich habe Probleme mit $query1. Sowohl Code als auch Bestätigungscode sind Varchar und nicht Integer.

$username = $_GET['username']; 
$code = $_GET['code']; 
$confirmcode = "1"; 
$updatecode ="0"; 

$query=$con->prepare("SELECT username, code FROM customer_detail WHERE username ='$username'"); 
$query->execute(); 
$query->bind_result($checkusername, $checkcode); 
$query->fetch(); 

$query1=$con->prepare("UPDATE customer_detail SET code=?, confirmcode=? WHERE username = ?"); //error 
$query1->bind_param('sss',$username, $updatecode, $confirmcode); //error 
$query1->execute(); 
+0

Ihre erste Abfrage schlägt fehl; Du hast nichts zu binden. –

+0

danke für Ihre Antwort. Ich habe tatsächlich Probleme mit der 2. Abfrage, die erste Abfrage funktioniert gut –

+1

Tun Sie ein 'echo $ query1-> Fehler;' und sehen, was es ausspuckt. Das heißt, Sie versuchen, vorbereitete Anweisungen für die erste Abfrage zu verwenden, aber Sie binden die Variable nicht tatsächlich mit einem Platzhalter, so dass Sie wie immer verwundbar sind. – Qirel

Antwort

1

Das Problem ist, dass MySQLi nicht mehrere Abfragen auf einmal ausführen kann, da es Ubuffered Abfragen verwendet. Sie müssen die erste Anweisung schließen, bevor Sie eine andere ausführen können. Fügen Sie die folgende Zeile nach $query->fetch(); hinzu.

$query->close(); 

Nachdem dies gesagt ist, wird Ihre erste Abfrage nicht gegen SQL-Injection bewacht, da Sie die Variable direkt in der Abfrage verwenden. Wenn Sie die richtigen Platzhalter für Ihre Abfrage hinzufügen, würde der endgültige Code wie folgt aussehen:

$query = $con->prepare("SELECT username, code FROM customer_detail WHERE username =?"); 
$query->bind_param('s', $username); 
$query->execute(); 
$query->bind_result($checkusername, $checkcode); 
$query->fetch(); 
$query->close(); 

$query1 = $con->prepare("UPDATE customer_detail SET code=?, confirmcode=? WHERE username = ?"); 
$query1->bind_param('sss',$username, $updatecode, $confirmcode); 
$query1->execute(); 
$query1->close(); 
1

Versuchen Sie den folgenden Code. Grundsätzlich müssen Sie die Parameter in der gleichen Reihenfolge binden, in der die Platzhalter (?) In der SQL erscheinen.

$query=$con->prepare("SELECT username, code FROM customer_detail WHERE username = ?"); 
$query->bind_param('s', $username); 
$query->execute(); 
$query->bind_result($checkusername, $checkcode); 
$query->fetch(); 


$query1=$con->prepare("UPDATE customer_detail SET code=?, confirmcode=? WHERE username = ?"); 
$query1->bind_param('sss', $updatecode, $confirmcode, $username); 
$query1->execute(); 
+0

das hat auch funktioniert, danke –

-1

Haben Sie es versucht?

$query1->bind_param('iis', $updatecode, $confirmcode, $username);