Bereiten Statement MySQLi - Rückkehr Falsch, aber warum?
-
10-07-2019 - |
Frage
I haben eine Funktion, die einen vorbereiteten INSERT-Anweisung basierend auf einer assoziativen Matrix von Spaltennamen und Werte erzeugt in dieser Spalte und einen Tabellennamen eingefügt werden (eine einfache string):
function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
Mein Problem ist, dass $ this-> conn-> prepare (es ist Teil einer Klasse, anschl ist ein neues mysqli-Objekt, das ohne Probleme funktioniert) gibt false zurück, aber nicht geben Sie mir einen Grund, warum!
Hier ist ein Beispiel $ sqlString, die für die Vorbereitung Anweisung erstellt werden:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Kann jemand ein Problem mit dieser parametrisierte Anweisung sehen? Gibt es Gründe, die Vorbereitung Funktion zurückkehren würde falsch?
Lösung
Ich bin Kopieren Sie die Lösung in diese Antwort so dies eine upvote gegeben werden kann, da sonst die Frage in den „offenen Fragen“ erscheint für immer. Ich Kennzeichnung diese Antwort CW, damit ich keine Punkte bekommen.
@ Andrew E. sagt:
Ich drehte gerade auf
mysqli_report(MYSQLI_REPORT_ALL)
zu ein besseres Verständnis von dem, was los - stellt sich heraus, dass einer meiner Feldnamen falsch war - du würdest denken, dassprepare()
ein werfen würde Ausnahme, aber es funktioniert nicht still.