Безответные запросы , возвращение

190
19 декабря 2016, 19:30

Есть к примеру запросы

UPDATE `users` SET `money` = money - $price WHERE `id` = 5;
DELETE FROM `users` WHERE `id` = 5;
INSERT INTO `users`(id, login) VALUES(5, 'login');

Если в пхп не будет ошибок с функциями отправки и т.д тогда мне в любом случае возвратится true

Даже если у меня будет не правильно написано название колонки, или значение.

Можно ли как то отследить SQL ошибки в пхп?

Answer 1

Не можно, а нужно. Только вы не указали какую библиотеку вы используете для работы с MySQL, поэтому рассмотрю несколько вариантов.

В общем случае обработку ошибок при запросах к базе следует выполнять в виде исключений.

Если вы используете php_mysql или php_mysqli, то после выполнения запроса с ошибкой функциями mysql_query(), mysqli_query() или mysqli_stmt_execute() вы получите FALSE. При этом можно бросить исключение:

$mysqliStmt->execute() or throw new Exception($mysqli->error, $mysqli->errno);

Также рекомендую для исключений при работе с базой определить отдельно свой класс, порожденный от Exception.

В php_pdo все это есть "из коробки". Чтобы при возникновении ошибок бросались исключения достаточно после создания экземпляра класса PDO указать способ обработки ошибок:

$pdoConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

При этом, в случае возникновения ошибок будет бросаться исключение типа PDOException.

READ ALSO
Как с помощью json_decode разобрать только первый уровень JSON?

Как с помощью json_decode разобрать только первый уровень JSON?

В VK API есть загрузка фотографий для товаров (vkcom/dev)

165
Можно ли использовать autoload вне фреймворка?

Можно ли использовать autoload вне фреймворка?

Вот есть установленный композером Бутстрап

190
Как называются поля для входа в роутер? [закрыто]

Как называются поля для входа в роутер? [закрыто]

Нужно узнать name полей <input> для входа в роутер

213
При загрузке на amazon получаю не тот url

При загрузке на amazon получаю не тот url

Если я не ошибаюсь, то метод getObjectUrl, возвращает url для "внутреннего" использования и не предназначен для публичного использования

216