Ответ 1
Просто проверьте, не возникли ли ошибки после выполнения запроса.
Если вы используете mysql
, отметьте mysql_error(): if (!mysql_error()) print 'all is fine';
То же самое для mysqli.
Скажем, у вас есть форма с предварительно заполненными данными из вашей базы данных, и вы позволяете своим пользователям вносить изменения и сохранять форму. Если пользователь нажимает кнопку сохранения без каких-либо изменений, MySQL фактически не выполняет операцию записи, и поэтому affected_rows вернет 0.
Я понимаю поведение, но какова наилучшая практика для определения того, произошло ли обновление, отличное от проверки числа affected_rows?
Какова наилучшая практика для дифференциации между действительно удаленным обновлением и тем, что "удалось", но привело к 0 affected_rows, чтобы я мог предоставить обратную связь пользователю?
Просто проверьте, не возникли ли ошибки после выполнения запроса.
Если вы используете mysql
, отметьте mysql_error(): if (!mysql_error()) print 'all is fine';
То же самое для mysqli.
[affected_rows()] [1] - -1, если запрос завершается с ошибкой, а не ноль.
[1]: http://www.php.net/manual/en/function.mysql-affected-rows.php
Он может возвращать 0, если никакие изменения не были сделаны в строке (одинаковые значения), или если mysql не нашел строку для обновления. Он будет возвращать только -1 из-за синтаксиса erro
Вариант 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();
}
если обновление "сбой" из-за синтаксической ошибки или другой 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