Допустим, у вас есть форма с предварительно заполненными данными из вашей базы данных, и вы позволяете своим пользователям вносить изменения и сохранять форму. Если пользователь нажимает кнопку сохранения без внесения каких-либо изменений, MySQL фактически не выполняет операцию записи, и поэтому affected_rows вернет 0.
Я понимаю поведение, но какова наилучшая практика для определения того, произошло ли обновление, отличное от проверки числа affected_rows?
Какова наилучшая практика для дифференциации между фактическим завершением обновления и тем, что «удалось», но привело к 0 affected_rows, чтобы я мог предоставить обратную связь пользователю?
Просто проверьте, не возникли ли ошибки после выполнения запроса.
Если вы используете mysql
, проверьте mysql_error () :
if (!mysql_error()) print 'all is fine';
То же самое для mysqli .
Вариант 1:
mysql_query() or die('error');
Вариант 2:
$conn = mysql_query(); if(!$conn) {//Error code here}
Вариант 3:
try { $conn = mysql_query(); if (!$conn) throw new Exception("mysql Error"); } catch(Exception $e) { echo $e->getMessage(); }
[affected_rows ()] [1] – -1, если запрос завершается с ошибкой, а не ноль.
[1]: http://www.php.net/manual/en/function.mysql-affected-rows.php
Он может возвращать 0, если никакие изменения не были сделаны в строке (одинаковые значения), или если mysql не нашел строку для обновления. Он будет возвращать только -1 из-за синтаксиса erro
если обновление «сбой» из-за синтаксической ошибки или другой mysql вернет код ошибки в фактическом запросе mysql, а affected_rows вернется с еще одной ошибкой.
Например, Php:
$qry = mysql_query("update blah where IamaSyntaxerror,33"); if ($qry === FALSE) { echo "an error has occured"; } else { mysql_affected_rows() == 0 means no updates occured