#php #mysql
#php #mysql
Вопрос:
новое здесь и действительно зеленое для программирования, так что полегче..
Я обнаружил INSERT
, что у меня сбой из-за ошибки повторяющейся записи. Я понял это, запустив запрос в консоли MySQL с литералами, где появилась ошибка # 1062.
Что я хочу понять, так это почему mysql_error()
or mysql_errno()
не поймал эту ошибку в моем PHP-скрипте.
Ниже приведена общая настройка того, что я сделал. У меня есть форма, которая отправляет в файл php, который вызывает data_insert()
function data_insert($var1, $var2, $var3, $var4){
$db = db_connect();
$query = "INSERT INTO exampletable (id, id_2, id_3, id_4)
VALUES ('$var1', '$var2', '$var3', '$var4')";
$result = $db->query($query);
if (!$result)
{
echo ('Database Error:' . mysql_error());
}
else
{
echo "Data added to db";
}
}
Подключение к БД:
function db_connect()
{
$result = new MySQLi('localhost', 'root', 'root', 'dbname');
if (!$result)
throw new Exception('Could not connect to database server');
else
return $result;
}
Результат, который я получаю, это:
Database Error:
PHP выдает «Ошибка базы данных:» из-за INSERT
сбоя, но последующая информация об ошибке MySQL не отображается. Честно говоря, я не совсем уверен, что я должен видеть, но, прочитав некоторые другие вопросы SO, я дважды проверил свой файл php.ini на предмет обработки ошибок, и E_ALL и display_errors установлены соответствующим образом (хотя не уверен, имеет ли это значение в данном случае).
Есть ли что-то в моей логике, чего я не понимаю, например, область действия ресурса ссылки, который принимает mysql_error()?
Спасибо за вашу помощь, я надеюсь, что это что-то смущающе очевидное.
Я знаю, что в приведенном выше не хватает XSS и мер предосторожности и единообразной обработки исключений. Тем не менее, небольшие шаги. Здесь это упрощено для обсуждения.
Ответ №1:
Вы используете mysqli (обратите внимание на i) для своих операций с БД, но вызываете mysql_error (без i). Это два совершенно разных интерфейса, и они вообще не разделяют внутренние состояния. Дескрипторы / результаты одного из них не могут быть использованы в другом.
Попробуйте mysqli_error()
вместо этого (обратите внимание на I).
Комментарии:
1. Я просто знал, что это будет что-то базовое. Спасибо!
Ответ №2:
Насколько я могу судить, вы, похоже, используете класс MySQLi для подключения и запросов, но пытаетесь получить доступ к сообщению об ошибке MySQL. MySQLi и MySQL — это не одно и то же, поэтому ошибки в одном не будут отображаться в другом. Вы должны искать обработку ошибок для MySQLi, а не MySQL.
Ответ №3:
Вы путаете два отдельных метода подключения к базе данных MySQL.
mysql_error()
будет работать только с запросами, которые выполняются mysql_query()
.
Поскольку вы используете mysqli, вы должны использовать mysqli_error()