为什么我在尝试计算 mysqli 结果时收到警告?



下面的代码会导致此警告:

警告:count((:参数必须是实现 Countable 的数组或对象

它为什么要这样做?如何防止警告?

if (isset($_GET['edit'])) {
$sonum = $_GET['edit'];
$update = true;
$result = $mysqli->query("SELECT * FROM salesorder WHERE sonum=$sonum") or die ($mysqli->error);
if (count($result)==1) {
$row = $result->fetch_array();
$salesperson = $row['salesperson'];
$company = $row['company'];
$status = $row['status'];
}
}
$result

要么是mysqli_result对象,要么是bool。(请参阅mysqli_query文档中的"返回值"。这些都不是可数的。较新的PHP版本会在您尝试计数不可数的东西时警告您,即使count()仍然会返回一个值(目前!

if (count($result)==1) {不会在 PHP <7.2 版本中发出该警告,但它从未真正执行任何操作,因为无论查询是否失败count($result)始终为 1。您可能不希望是这样,但count(false)返回 1。这就是为什么count()现在发出警告是一件好事的部分原因。

如果您只是尝试在查询返回任何行时设置这些变量,则可以这样做:

if ($result && $row = $result->fetch_array()) {
$salesperson = $row['salesperson'];
$company = $row['company'];
$status = $row['status'];
}

顺便说一下,你应该看看 如何防止 PHP 中的 SQL 注入?并修复...WHERE sonum=$sonum"处的注入漏洞。应使用预准备语句并绑定$sonum,而不是将其包含在 SQL 字符串中。

相关内容

最新更新