“== 0”在 Select 从 mysql 之后不工作
"== 0" Not Working After Select From mysql
我希望我的代码检查特定书籍的可用副本是否为 0,以便将其状态更新为 1(使其不可用)
现在我的问题是,每当我的这部分代码运行时,IF 语句总是为真,无论它前面的 Select 语句 returns 的值是否为 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);
}
您的两个查询可以合并为一个:
$sql = "UPDATE books SET status = 1 WHERE id = '$bid' AND Available_Copies = 0";
$query = $conn->query($sql);
首先,您正在检查变量 $sql
,它只是一个 PHP 非空字符串。将其与 0
进行比较将永远行不通。
但是,假设您的意思是:
$sql = "SELECT Available_Copies from books WHERE id = '$bid'";
$query = $conn->query($sql);
if($query == 0)
// ^^^^^^
……那也不对。 query()
returns a result object。它不 return 查询检索到的列的值。通常,您的 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 statements to safeguard your system from accidents and terrorists。不要按照我上面显示的方式进行操作。不要像那样将 $bid
插入到字符串中。如果你的学习material(书上)没有这样说,得到不同的学习material.
这里 $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);
}
我希望我的代码检查特定书籍的可用副本是否为 0,以便将其状态更新为 1(使其不可用)
现在我的问题是,每当我的这部分代码运行时,IF 语句总是为真,无论它前面的 Select 语句 returns 的值是否为 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);
}
您的两个查询可以合并为一个:
$sql = "UPDATE books SET status = 1 WHERE id = '$bid' AND Available_Copies = 0";
$query = $conn->query($sql);
首先,您正在检查变量 $sql
,它只是一个 PHP 非空字符串。将其与 0
进行比较将永远行不通。
但是,假设您的意思是:
$sql = "SELECT Available_Copies from books WHERE id = '$bid'";
$query = $conn->query($sql);
if($query == 0)
// ^^^^^^
……那也不对。 query()
returns a result object。它不 return 查询检索到的列的值。通常,您的 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 statements to safeguard your system from accidents and terrorists。不要按照我上面显示的方式进行操作。不要像那样将 $bid
插入到字符串中。如果你的学习material(书上)没有这样说,得到不同的学习material.
这里 $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);
}