У меня есть простой код:
$SQL = $db->prepare(
"INSERT INTO tbl_signup (full_name,email,telephone,password) VALUES (?,?,?,?)");
$SQL->bind_param('ssss', $full_name, $signup_email,$telephone, $password);
$SQL->execute();
Этот код не работает. Никакая строка не вставлена в bdd. Нет ошибки. Ничего.
И когда я добавляю:
$full_name = $signup_email = $telephone = $password = "";
Код работает.
Вывод: неопределенная переменная не допускается с помощью bindparam.
Но как получить ошибку в моем случае??
Я пробовал все:
$SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$SQL->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$SQL->execute();
echo "\nPDO::errorCode(): ", $SQL->errorCode();
print_r($SQL->errorInfo());
$SQL->debugDumpParams();
Но у меня нет ошибки.
Как получить ошибку?
Ваша первая проблема заключается в том, что вам удалось запутать mysqli (который вы на самом деле используете) с PDO.
Вторая проблема заключается в том, что ваш вывод ошибочен. Если бы вы выполняли запрос SELECT, вы видели, что этот запрос работает правильно.
Третьей проблемой является отсутствие сообщений об ошибках mysqli. Добавьте эту строку перед подключением:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
и вы сможете увидеть ошибку mysql, преобразованную в исключение PHP. Скорее всего, это будет вставлять нулевое значение, если не разрешено null
Проверьте там: http://php.net/manual/en/pdo.error-handling.php
и там: http://php.net/manual/en/class.pdoexception.php
Перепишите свой код на:
try {
<..>
$SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$SQL->execute();
} catch (PDOException $e) {
echo 'Something wrong: ' . $e->getMessage();
}
Fatal error: Call to undefined method mysqli_stmt::setAttribute()
prepare()
использует методы MySQLi, но позже вы попытаетесь использовать обработку ошибок PDO. Какой вы используете? Их API отличаются. Первое, что нужно сделать, - включить собственный отчет об ошибках PHP, так как он должен жаловаться на неопределенные методы.error_reporting(E_ALL); ini_set('display_errors', 1);
вверху вашего скрипта, всегда при отладке и тестировании. Неустранимая ошибка в коде из-за этого несоответствия без включенных display_errors, поэтому вы не видите сообщений об ошибках.bind_param('ssss', $var1, $var2, $varN)
- это метод MySQLi. Эквивалентом в PDO являетсяbindParam()
.