Tengo una función que genera una instrucción INSERT preparada sobre la base de una matriz asociativa de nombres y valores de las columnas para insertarse en esa columna y un nombre de tabla (una cadena simple):Declaración de preparación de Mysqli: volviendo falso, pero ¿por qué?
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 false, ¡pero no me da una razón por la cual!
Aquí está una muestra de $ sqlString que consigue construida para preparar la declaración:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Puede alguien ver un problema con esta declaración con parámetros? ¿Alguna razón por la cual la función de preparación devolvería falsa?
Aparece un mensaje de error (vea http://php.net/manual/en/mysqli.error.php cuando prepare devuelve falso?); y si si, que ? –
¿Ha intentado ejecutar la instrucción INSERT real en su base de datos, para ver si tiene el SQL correcto? – DOK
Acabo de activar mysqli_report (MYSQLI_REPORT_ALL) para obtener una mejor comprensión de lo que estaba sucediendo; resulta que uno de mis nombres de campo era incorrecto; se podría pensar que prepare() arrojaría una excepción, pero falla silenciosamente. –