statements statement sentencias query prepared preparadas bind_param array php mysqli prepared-statement

php - statement - Mysqli Preparar declaración-Devolviendo Falso, pero ¿Por qué?



prepared statement php pdo (1)

Tengo una función que genera una instrucción INSERT preparada basada en una matriz asociativa de nombres de columnas y valores 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 false, ¡pero no me da una razón para ello!

Aquí hay un ejemplo de $ sqlString que se construye para la declaració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 false?


Estoy copiando la solución en esta respuesta para que esto pueda recibir un voto positivo, de lo contrario, la pregunta aparecerá en las "preguntas sin respuesta" para siempre. Estoy marcando esta respuesta CW para no obtener ningún punto.

@Andrew E. dice:

Acabo de activar mysqli_report(MYSQLI_REPORT_ALL) para comprender mejor lo que estaba pasando ( resulta que uno de mis nombres de campo era incorrecto ) pensarías que prepare() lanzaría una excepción, pero falla silenciosamente.