You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复sqlsrv_num_rows()参数为布尔值而非资源的警告?

修复sqlsrv_num_rows() expects parameter 1 to be resource, boolean given警告的方案

这个警告的核心原因很明确:你的sqlsrv_query()执行失败了,返回了布尔值false(而不是预期的结果集资源),当你把这个false传给sqlsrv_num_rows()时,就触发了类型不匹配的警告。下面是具体的修复步骤:

1. 先检查查询执行结果,避免直接使用无效的返回值

在调用sqlsrv_num_rows()之前,必须先判断sqlsrv_query()是否成功执行。如果失败,先捕获错误信息,这能帮你快速定位问题根源。修改你的代码片段如下:

$results = sqlsrv_query($dbconn, $query2, array(), array('Scrollable' => 'static'));

// 先检查查询是否成功执行
if ($results === false) {
    // 获取详细的SQL错误信息,用于调试
    $errors = sqlsrv_errors();
    foreach ($errors as $error) {
        echo "SQL执行错误: " . $error['message'];
        echo "错误代码: " . $error['code'];
    }
    // 可以根据业务需求终止脚本或做降级处理
    exit;
}

// 确认结果集有效后,再调用sqlsrv_num_rows()
if (sqlsrv_num_rows($results) >= 2) {
    // 你的UPDATE逻辑(注意这里也要检查后续SQL的合法性)
    $query3 = "UPDATE ClanDb.dbo.CL SET RegiDate = '$today', Cpoint = (SELECT SUM(Point) FROM SodDb.dbo.Sod2Clan$yyMM WHERE ...)";
    // 同样要检查$query3的执行结果
    $updateResult = sqlsrv_query($dbconn, $query3);
    if ($updateResult === false) {
        // 处理更新错误
    }
}

2. 排查$query2本身的语法问题

sqlsrv_query()返回false绝大多数情况是SQL语句有问题,结合你提供的代码片段,重点检查这几点:

  • 你的$query2语句是不完整的(末尾有截断),这肯定会导致SQL语法错误,先补全并验证SQL的正确性
  • 动态表名Sod2Clan$yyMM:确保变量$yyMM已经正确赋值(比如格式为202405这类合法的年月字符串),且对应的表确实存在于数据库中
  • 检查SQL语句中的括号、逗号、字段名/表名拼写是否正确,比如是否有遗漏的闭合括号

3. 额外注意:规避SQL注入风险

你的代码中直接将$today和动态表名拼接到SQL语句中,存在严重的SQL注入风险。建议:

  • 对于$today这类参数,使用参数化查询替代直接拼接:
    // 示例:参数化UPDATE语句中的RegiDate
    $query3 = "UPDATE ClanDb.dbo.CL SET RegiDate = ?, Cpoint = (SELECT SUM(Point) FROM SodDb.dbo.Sod2Clan$yyMM WHERE ...)";
    $params = array($today);
    $updateResult = sqlsrv_query($dbconn, $query3, $params);
    
  • 对于动态表名,无法用参数化查询,建议做白名单验证,确保$yyMM对应的表名是合法存在的,比如:
    // 生成合法的表名列表(可根据业务动态生成)
    $validTables = array("Sod2Clan202404", "Sod2Clan202405", "Sod2Clan202406");
    $targetTable = "Sod2Clan$yyMM";
    if (!in_array($targetTable, $validTables)) {
        die("非法的表名请求");
    }
    // 再将$targetTable拼接到SQL中
    

内容的提问来源于stack exchange,提问作者puka Pukay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:41:13