Mysql_error () не улавливает ошибку вставки в PHP

#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()