Mysqli подготовить заявление - возвращение неверно, но почему?
-
10-07-2019 - |
Вопрос
У меня есть функция, которая генерирует подготовленный оператор INSERT на основе ассоциативного массива имен столбцов и значений для вставки в этот столбец и имени таблицы (простая строка):
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;
}
Моя проблема в том, что $ this-> gn; prepare (это часть класса, conn - это НОВЫЙ объект mysqli, который работает без проблем) возвращает false, но не дает мне причину почему! р>
Вот пример $ sqlString, который создается для оператора prepare:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
Может ли кто-нибудь увидеть проблему с этим параметризованным оператором? По какой-либо причине функция prepare будет возвращать false?
Решение
Я копирую решение в этот ответ, чтобы его можно было поднять, в противном случае вопрос будет отображаться в разделе «Вопросы без ответа». навсегда. Я отмечаю этот ответ CW, поэтому я не получу никаких баллов.
@ Андрей Э. говорит:
Я только что включил
mysqli_report (MYSQLI_REPORT_ALL)
для получить лучшее понимание того, что было происходит - оказывается, что один из моих неправильные имена полей . думаю, чтоprepare ()
выдаст исключение, но оно молча завершается неудачей.