mysql_affected_rows () всегда возвращается 1 даже при том, что никакая строка не была обновлена

То, что я пытаюсь сделать: (программно)

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

Здесь я использую mysql_affected_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.

5
задан happyhardik 15 May 2010 в 14:16
поделиться

2 ответа

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

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

4
ответ дан 14 December 2019 в 13:28
поделиться

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

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

2
ответ дан 14 December 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: