Почему запрос все еще выполняется, когда условие не выполняется? - PullRequest
0 голосов
/ 16 января 2019

Я получил следующий тестовый оператор SQL, который ссылается на базу данных. У меня нет записи в базе данных, которая соответствует 900, но она возвращает результаты = 1 вместо 0. Могу ли я узнать, в чем причина?

$query = "update mytable set verify = 'yes' where number ='900'";

$result = $conn->query($query);

if (!$result){
    $json_out = "[" . json_encode(array("result"=>0)) . "]";        
}
else {
    $json_out = "[" . json_encode(array("result"=>1)) . "]";        
}

echo $json_out;

1 Ответ

0 голосов
/ 16 января 2019

Вы получаете 1 результат, потому что вы не проверяете наличие поврежденных строк. В запросе нет ошибок, поэтому вы получите 1 результат.

Чтобы ваш результат был точным, вам нужно проверить строки с нулем по сравнению с ненулевым значением.

http://php.net/manual/en/mysqli.affected-rows.php

Непроверенное предложение:

echo json_encode(['result' => (int)($conn->query("UPDATE mytable SET verify = 'yes' WHERE number = '900'") && $conn->affected_rows)]);

Другими словами, если запрос возвращает неверный результат, а результат для затронутых строк не равен нулю, тогда все условие оценивается как true. Если вы разыгрываете true как целое число, вы получаете 1; false становится 0.

...