从mysql中选择“ == 0”后无法正常工作

时间:2019-03-16 13:51:18

标签: php mysql if-statement select zero

我希望我的代码检查特定图书的可用副本是否为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 个答案:

答案 0 :(得分:5)

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

## note: (1) date starts as character, not format;
## (2) use %y, not %Y, for 2-digit year format
library(ggplot2); theme_set(theme_bw())
dd$date <- as.Date(dd$date, format="%d/%m/%y")
ggplot(dd,aes(date,rc))+geom_boxplot(aes(group=date))+
    scale_x_date(date_label="%d %b %y")
ggsave("gg_date.png")

答案 1 :(得分: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 objectfetch_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插值到这样的字符串中。如果您的学习材料(书)没有这样说,请获取其他学习材料。

答案 2 :(得分: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);              
}