"== 0" не работает после выбора из MySQL - PullRequest
0 голосов
/ 16 марта 2019

Я хочу, чтобы мой код проверял, есть ли доступные копии для конкретной книги 0, чтобы он обновил свой статус до 1 (делая его недоступным)

Теперь моя проблема в том, что всякий раз, когда выполняется эта часть моего кода, оператор IF всегда имеет значение true, независимо от того, будет ли оператор Select до этого возвращать значение 1 или выше. Так что теперь книга становится недоступной, даже если у нее все еще есть копии

$sql = "SELECT Available_Copies from books WHERE id = '$bid'";
$query = $conn->query($sql);
if($sql == 0)
{   
  $sql = $conn->query("UPDATE books SET status = 1 WHERE id = '$bid' ");
  $query = $conn->query($sql);              
}   

Ответы [ 3 ]

5 голосов
/ 16 марта 2019

Ваши два запроса могут быть объединены в один:

$sql = "UPDATE books SET status = 1 WHERE id = '$bid' AND Available_Copies = 0";
$query = $conn->query($sql);
3 голосов
/ 16 марта 2019

Прежде всего, вы изучаете переменную $sql, которая является просто непустой строкой PHP. Сравнение с 0 никогда не сработает.

Но, предполагая, что вы вместо этого имели в виду:

   $sql = "SELECT Available_Copies from books WHERE id = '$bid'";
   $query = $conn->query($sql);
   if($query == 0)
//    ^^^^^^

& hellip; тогда это тоже не правильно. query() возвращает объект результата . Он не возвращает значение столбца, полученного по вашему запросу. Как правило, ваш код PHP не знает о вашем коде SQL; это отдельные домены. Объект результата - это магический клей, который соединяет два домена вместе, но вы должны использовать его, как описано в документации, чтобы получить ожидаемые результаты.

См. Руководство по , как использовать объект результата . fetch_row() выглядит хорошо для вас.

Кроме того, я бы рекомендовал называть его $result, а не $query, потому что это результат, а не запрос.

Однако! Вы должны рассмотреть возможность объединения ваших операций в одну, потому что в настоящее время SELECT совершенно не требуется:

UPDATE books SET status = 1 WHERE id = '$bid' AND Available_Copies = 0

Это позволяет избежать условий гонки и лишних накладных расходов, а также необходимости проверять значение столбца в PHP на всех !

Кроме того, параметризует ваши операторы SQL до для защиты вашей системы от несчастных случаев и террористов . Не делай так, как я показал выше. Не вставляйте $bid в строку таким образом. Если ваш учебный материал (книга) не говорит об этом, приобретите другой учебный материал.

0 голосов
/ 16 марта 2019

Здесь $sql будет содержать только строку запроса. Так что для получения значения вы должны использовать

$query->fetch_assoc()

Таким образом, ваш фактический код будет

$sql = "SELECT Available_Copies from books WHERE id = '$bid'";
$query = $conn->query($sql);
$result = $query->fetch_assoc();
if($result['Available_Copies'] == 0)
{  
  $sql = $conn->query("UPDATE books SET status = 1 WHERE id = '$bid' ");
  $query = $conn->query($sql);              
}  
...