Как определить, удалось ли выполнить запрос на обновление MySQL, когда данные, переданные в запросе, такие же, как и в базе данных?

Скажем, у вас есть форма с предварительно заполненными данными из вашей базы данных, и вы позволяете своим пользователям вносить изменения и сохранять форму. Если пользователь нажимает кнопку сохранения без каких-либо изменений, MySQL фактически не выполняет операцию записи, и поэтому affected_rows вернет 0.

Я понимаю поведение, но какова наилучшая практика для определения того, произошло ли обновление, отличное от проверки числа affected_rows?

Какова наилучшая практика для дифференциации между действительно удаленным обновлением и тем, что "удалось", но привело к 0 affected_rows, чтобы я мог предоставить обратную связь пользователю?

Ответ 1

Просто проверьте, не возникли ли ошибки после выполнения запроса.
Если вы используете mysql, отметьте mysql_error():
if (!mysql_error()) print 'all is fine';
То же самое для mysqli.

Ответ 2

[affected_rows()] [1] - -1, если запрос завершается с ошибкой, а не ноль.

[1]: http://www.php.net/manual/en/function.mysql-affected-rows.php

Он может возвращать 0, если никакие изменения не были сделаны в строке (одинаковые значения), или если mysql не нашел строку для обновления. Он будет возвращать только -1 из-за синтаксиса erro

Ответ 3

Вариант 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();
}

Ответ 4

если обновление "сбой" из-за синтаксической ошибки или другой 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