Dichiarazione Prepara Mysqli - Restituzione di False, ma perché?
-
10-07-2019 - |
Domanda
Ho una funzione che genera un'istruzione INSERT preparata basata su una matrice associativa di nomi e valori di colonne da inserire in quella colonna e un nome di tabella (una semplice stringa):
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;
}
Il mio problema è che $ this- > conn- > prepar (fa parte di una classe, conn è un NUOVO oggetto mysqli, che funziona senza problemi) restituisce false, ma non mi dà un motivo per cui!
Ecco un esempio di $ sqlString che viene creato per l'istruzione preparazione:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Qualcuno può vedere un problema con questa istruzione con parametri? Qualche motivo per cui la funzione di preparazione restituisce false?
Soluzione
Sto copiando la soluzione in questa risposta in modo che possa essere dato un voto positivo, altrimenti la domanda apparirà nelle "domande senza risposta". per sempre. Segnerò questa risposta in CW, quindi non otterrò alcun punto.
@Andrew E. dice:
Ho appena acceso
mysqli_report (MYSQLI_REPORT_ALL)
in capire meglio cosa fosse continuando - risulta che uno dei miei i nomi dei campi non erano corretti pensa cheprepar ()
lanci un eccezione, ma fallisce silenziosamente.