Declaración de preparación de Mysqli: devolución falsa, pero ¿por qué?
-
10-07-2019 - |
Pregunta
Tengo una función que genera una instrucción INSERT preparada basada en una matriz asociativa de nombres y valores de columna para insertar en esa columna y un nombre de tabla (una cadena 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;
}
Mi problema es que $ this- > conn- > prepare (es parte de una clase, conn es un NUEVO objeto mysqli, que funciona sin problemas) devuelve falso, ¡pero no me da una razón por la cual!
Aquí hay un ejemplo de $ sqlString que se crea para la instrucción de preparación:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
¿Alguien puede ver un problema con esta declaración parametrizada? ¿Alguna razón por la cual la función de preparación devolvería falso?
Solución
Estoy copiando la solución en esta respuesta para que se pueda dar un voto a favor, de lo contrario, la pregunta aparecerá en las "preguntas sin respuesta". Siempre. Estoy marcando esta respuesta en sentido horario para que no obtenga ningún punto.
@ Andrew E. dice:
Acabo de encender
mysqli_report (MYSQLI_REPORT_ALL)
para obtener una mejor comprensión de lo que era pasando - resulta que uno de mis los nombres de campo eran incorrectos : usted piensa queprepare ()
arrojaría un excepción, pero falla en silencio.