mysql_acted_rows () всегда возвращает 1, даже если ни одна строка не была обновлена - PullRequest
5 голосов
/ 15 мая 2010

Я пытаюсь сделать следующее: (программно)

Обновление статуса, где id - это что-то, если строки не были обновлены, выдает ошибку: мы не можем найти запись с чем-то id, в противном случае - сообщение успешно.

Здесь я использую mysql_affered_rows (), чтобы узнать, была ли строка обновлена ​​или нет, но она всегда возвращает 1, поэтому пользователь получает сообщение об успехе, даже если не было обновленной строки.

Может кто-нибудь сказать мне, что это может быть?

Вот код:

   function update_sql($sql) {


  $this->last_query = $sql;

  $r = mysql_query($sql);

  if (!$r) {
     $this->last_error = mysql_error();         
     return false;
  }      
  $rows = mysql_affected_rows();
  if ($rows == 0) return true;  // no rows were updated
  else return $rows;  }

Этот код возвращает 1.

Ответы [ 2 ]

4 голосов
/ 15 мая 2010

Это потому, что true будет печататься как "1", если вы используете echo. Для отладки попробуйте использовать var_dump() или позвольте вашей функции вернуть 0 (что мне кажется в данном случае более подходящим вариантом).

Одна маленькая записка; Я думаю, вы должны попытаться сделать ваш код немного более читабельным (если код в вашем вопросе имеет ту же структуру, что и код в вашем файле). Попробуйте сделать отступ для блоков кода, использовать отдельные строки для закрытия фигурных скобок и т. Д. *

2 голосов
/ 15 мая 2010

Это всего лишь предположение ...

Может быть, ваша функция работает как исключение? Может быть, этот фрагмент кода if ($rows == 0) return true; работает нормально и возвращает true, но вы рассматриваете это значение как целое число (логическое значение true может отображаться как 1)? Выполните: var_dump(uddated_sql('YOUR QUERY')) и проверьте, возвращает ли оно логическое значение true или целое число 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...