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

Php 为什么我在尝试计算mysqli结果时会收到警告?,php,mysql,mysqli,count,Php,Mysql,Mysqli,Count,以下代码导致此警告: 警告:count():参数必须是实现可计数的数组或对象 为什么会这样?我怎样才能避免警告 if (isset($_GET['edit'])) { $sonum = $_GET['edit']; $update = true; $result = $mysqli->query("SELECT * FROM salesorder WHERE sonum=$sonum") or die ($mysqli->error); if (co

以下代码导致此警告:

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

为什么会这样?我怎样才能避免警告

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
对象,如果查询失败,则
false
。(请参阅
mysqli_查询
文档中的“”)这两个都不可计数。较新的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'];
}

顺便说一下,您应该查看并修复
…中的注入漏洞,其中sonum=$sonum”
。您应该使用准备好的语句并绑定
$sonum
,而不是将其包含在SQL字符串中