从“mysql”中选择“== 0”后不工作

问题描述 投票:-1回答:3

我希望我的代码检查特定图书的可用副本是否为0,以便将其状态更新为1(使其不可用)

现在我的问题是,只要我的代码的这部分运行,无论Select语句返回值是1还是更高,IF语句总是为真。所以现在,即使它仍有副本,该书也无法使用

$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);              
}   
php mysql if-statement select zero
3个回答
5
投票

您的两个查询可以合并为一个:

$sql = "UPDATE books SET status = 1 WHERE id = '$bid' AND Available_Copies = 0";
$query = $conn->query($sql);

3
投票

首先,您正在检查变量$sql,它只是一个PHP非空字符串。将它与0相比将永远不会奏效。

但是,假设你的意思是:

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

......那也不对。 query() returns a result object。它不返回查询检索的列的值。通常,您的PHP代码不了解您的SQL代码;这些是独立的域名。结果对象是将两个域桥接在一起的神奇胶水,但您必须按照文档记录使用它才能获得您期望的结果。

请参阅how to use the result object的手册。 fetch_row()看起来很适合你。

另外,我建议把它称为$result,而不是$query,因为它是一个结果,而不是一个查询。

然而!你应该考虑将你的操作合并为一个,因为目前SELECT是完全没必要的:

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

这避免了竞争条件和过多的开销,并且需要检查PHP中的列值!

此外,parameterise your SQL statementssafeguard your system from accidents and terrorists。不要像我上面所示的那样去做。不要将$bid插入到字符串中。如果您的学习材料(书)没有说明这一点,请获取不同的学习材料。


0
投票

这里$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);              
}  
© www.soinside.com 2019 - 2024. All rights reserved.