2010-05-15 4 views
5

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

статус

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

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

+0

Не могли бы вы показать нам фрагмент кода, в котором это происходит? –

ответ

4

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

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

+0

+1 Хорошее образованное предположение, учитывая отсутствие информации в вопросе. –

+0

Спасибо за предложение, я попробую. Код выглядел надлежащим образом в моем редакторе, но имел дело с ним, когда я вставлял его здесь. – happyhardik

+0

Хорошо, в этом случае вы игнорируете мою маленькую заметку :) –

2

Это только предположение ...

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