Подтвердить что ты не робот

Mysql_affected_rows() возвращает 0 для инструкции UPDATE, даже если обновление действительно происходит

Я пытаюсь получить количество строк, затронутых в простом запросе обновления mysql. Однако, когда я запускаю этот код ниже, PHP mysql_affected_rows() всегда равен 0. Неважно, если foo = 1 уже (в этом случае функция должна правильно возвращать 0, так как ни одна строка не была изменена), или если foo в настоящее время равно некоторому другому целому числу (в этом случае функция должна возвращать 1).

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2";
mysql_query($updateQuery);
if (mysql_affected_rows() > 0) {
    echo "affected!";
}
else {
    echo "not affected"; // always prints not affected
}

Работает инструкция UPDATE. INT изменяется в моей базе данных. Я также дважды проверил, что соединение с базой данных не закрывается заранее или что-то напуганное. Имейте в виду, что mysql_affected_rows необязательно требует, чтобы вы передавали идентификатор ссылки на соединение, хотя я тоже это пробовал.

Подробная информация о функции: mysql_affected_rows

Любые идеи?

4b9b3361

Ответ 1

Более новые версии MySQL достаточно умны, чтобы проверить, выполнено ли изменение или нет. Допустим, вы активировали выражение UPDATE:

UPDATE tb_Employee_Stats SET lazy = 1 WHERE ep_id = 1234

Позволяет сказать, если значение столбца уже равно 1; то процесс обновления не выполняется, поэтому mysql_affected_rows() возвращает 0; else if Column lazy имеет другое значение, а не 1, затем возвращается 1. Нет других возможностей, кроме человеческих ошибок.

Ответ 2

Вы пытались напрямую использовать функцию MySQL ROW_COUNT?

mysql_query('UPDATE myTable SET foo = 1 WHERE bar = 2');
if(mysql_result(mysql_query('SELECT ROW_COUNT()'), 0, 0)) {
  print "updated";
}
else {
  print "no updates made";
}

Дополнительная информация об использовании ROW_COUNT и других информационных функций MySQL находится по адресу: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

Ответ 3

mysqli_affected_rows требует передать ссылку на подключение к базе данных в качестве единственного параметра вместо ссылки на ваш запрос mysqli. например.

$dbref=mysqli_connect("dbserver","dbusername","dbpassword","dbname");

$updateQuery = "UPDATE myTable SET foo=1 WHERE bar=2";

echo mysqli_affected_rows($dbref);

НЕ

echo mysqli_affected_rows($updateQuery);

Ответ 4

Попробуйте подключиться следующим образом:

$connection = mysql_connect(...,...,...);

а затем вызовите это

if(mysql_affected_rows($connection) > 0)
    echo "affected";
} else { ...

Ответ 5

Я думаю, вам нужно попробовать что-то еще в обновлении, а затем foo = 1. Поместите что-то общее, но вы увидите, что он обновляется или нет без цикла. то, если это так, ваш цикл if должен работать.

Ответ 6

Вы работаете над этим?

$timestamp=mktime();
$updateQuery = "UPDATE myTable SET foo=1, timestamp={$timestamp} WHERE bar=2";
mysql_query($updateQuery);

$updateQuery = "SELECT COUNT(*) FROM myTable WHERE timestamp={$timestamp}";
$res=mysql_query($updateQuery);
$row=mysql_fetch_row($res);
if ($row[0]>0) {
    echo "affected!";
}
else {
    echo "not affected";
}

Ответ 7

Была моя мысль!

Я как раз собирался сказать, чтобы функция вызывалась много раз!

Небольшой совет:

попробуйте использовать isset() и POST/GET или что-то в этом роде;

if ( isset( $_POST['Update'] == 'yes' ) ) :

// your code goes here ...

endif;

Надеюсь, что это было ясно и полезно, Ciao:)