Вводная: есть PHP файл который регистрирует пользователей в базе данных. Вроде бы все хорошо, но пользователь не записывается в базу.
Перед записью открывается соединение, выполняются проверки. То есть соединение с базой данных есть. Сам SQL-запрос составлен правильно, все хорошо. Но данные не записываются в базу, хоть ты тресни.
Возникают два вопроса:
- Почему не работает.
- Как понять, почему не работает.
Второй вопрос более приоритетный, и что?
Как вывести ошибки PHP запроса к базе данных
Для того, что бы посмотреть ошибки, нужно после запроса:
$result = $con->query("INSERT INTO ... запрос ...");
Добавить код, в итоге получиться:
$result = $con->query("INSERT INTO ... запрос ...");
if (!$result) {
var_dump(mysqli_error($result));
}
При этом мы получим ошибку PHP. Это важно понимать, тут ключевая фраза ошибка PHP.
Я получал следующие ошибки:
- Warning: mysqli_error() expects parameter 1 to be mysqli, null given in /var/www/fastuser/data/www/webinsert.ru/reg.php on line 133.
- Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in /var/www/fastuser/data/www/webinsert.ru/reg.php on line 133
Пользователи на просторах интернета пишут всякий бред, из разряда ты что, не умеешь читать ошибки что ли? Да, от души братуха, о чем говорят ошибки:
MySQL ожидает параметр 1, а получает NULL или логику. То есть ничего не понятно.
Нам нужно понять, в чем ошибка SQL. Я пробовал выполнить запрос на сервере, но он срабатывал.
Что бы понять в чем ошибка SQL нужно перед соединением с БД прописать код:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
И, о чудо, после ввода данных в форму регистрации появилась ошибка MySQL:
И теперь стало все понятно.
Данные слишком длинные для столбца ’email’ почты в строке 1.
Смотрю в базу и вижу.
А количество символов в поле e-mail которое я вводил было 22. Вот в чем моя ошибка.