php - 为什么我在尝试计算 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
对象,或者false
如果查询失败。(请参阅文档中的“返回值” mysqli_query
。)这些都不是可数的。当您尝试计算不可数的事物时,较新的 PHP 版本会警告您,即使count()
仍会返回一个值(现在!)
这if (count($result)==1) {
不会在 PHP 版本 < 7.2 中给出警告,但它从来没有真正做任何事情,因为count($result)
无论查询是否失败,它总是 1。你可能没想到会这样,但它会返回 1。这就是现在发出警告count(false)
是一件好事的部分原因。count()
如果您只是在查询返回任何行时尝试设置这些变量,则可以这样做:
if ($result && $row = $result->fetch_array()) {
$salesperson = $row['salesperson'];
$company = $row['company'];
$status = $row['status'];
}
顺便说一句,您应该看看如何在 PHP 中防止 SQL 注入?并修复注入漏洞 ...WHERE sonum=$sonum"
。您应该使用准备好的语句并绑定$sonum
而不是将其包含在 SQL 字符串中。
推荐阅读
- php - PHP中的会话未注册
- javascript - 如何知道电子邮件是否已经在firebase身份验证中注册,javascript?
- go - golang中的grpc服务器并发模型
- php - 自定义排序多维与 n 项最高值
- python - 如何对齐包含 MatPlotLib 中上下索引的刻度标签?
- pandas - 如何在熊猫数据框中的多列中使用多个算术函数
- spring - JwtAuthenticationToken 无法解析为类型
- python - 在python中长按键盘按下监听器
- apache-spark - apache spark过滤器方法中的HTTP API调用
- html - 如何更改 .container 的位置