Mysqli Prepare Statement - Rendre faux, mais pourquoi?
-
10-07-2019 - |
Question
J'ai une fonction qui génère une instruction INSERT préparée basée sur un tableau associatif de noms de colonnes et de valeurs à insérer dans cette colonne, ainsi qu'un nom de table (chaîne simple):
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;
}
Mon problème est que $ this- > conn- > prepare (cela fait partie d'une classe, conn est un NOUVEAU objet mysqli, qui fonctionne sans aucun problème) renvoie false, mais ne me donne pas de raison.!
Voici un exemple de $ sqlString construit pour l'instruction de préparation:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Quelqu'un peut-il voir un problème avec cette instruction paramétrée? Une raison quelconque pour laquelle la fonction de préparation renvoie la valeur false?
La solution
Je copie la solution dans cette réponse afin de donner un vote positif, sinon la question apparaîtra dans la rubrique "questions non résolues". pour toujours. Je marque cette réponse CW pour ne pas avoir de points.
@Andrew E. a déclaré:
Je viens d'allumer
mysqli_report (MYSQLI_REPORT_ALL)
à mieux comprendre ce qui était passe - se trouve que l'un de mes les noms de champs étaient incorrects - vous pense queprepare ()
jetterait un exception, mais elle échoue silencieusement.