【问题标题】:Warning: sqlsrv_num_rows() expects parameter 1 to be resource, boolean given [duplicate]警告:sqlsrv_num_rows() 期望参数 1 是资源,给定的布尔值 [重复]
【发布时间】:2016-02-11 15:46:04
【问题描述】:

此警告可能由于许多不同的原因而发生,但是,我认为我的问题是表APPT 是空的/并且不包含任何rowt_schedule_id。我阅读了每个可能已经有我答案的问题,并且所有答案都说明了同样的事情“您的 SQL 查询不成功,并且正在返回 FALSE 布尔值”..所以是的,我知道查询返回 false 因为那里t_schedule_id 是 0 行,这就是我的观点,我希望我的函数在有 0 行时返回 int 0 t_schedule_id

函数.php

function get_appt($schedule_id,$conn){

    $query = "select t_schedule_id as t_schedule_id from [dbo].[APPT] where t_schedule_id = .$schedule_id.; ";

    $stmt = sqlsrv_query($conn,$query);

    $row_count = sqlsrv_num_rows($stmt);

    if ($row_count === false){
       return 0;
    }else{
       return $row_count;
    }
 }

应用程序.php

$get_appt = get_appt(1, $conn);
echo $get_appt;

所以,我的问题是,我如何才能停止获取此 warning,无论表是否返回 0 如果是 00 如果是 number > 0,则返回该数字。

PS:我知道我的查询名称没有错误,例如 table name, column name etc ... 并且,当我 echo $get_appt; 得到值 0 时,也会收到警告

警告:sqlsrv_num_rows() 期望参数 1 是资源,在第 220 行给出布尔值

这是第 220 行 $row_count = sqlsrv_num_rows($stmt);

【问题讨论】:

  • 为什么不改为查询count(t_schedule_id)
  • 我会收到这个警告warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given
  • 快速浏览会发现您的 SQL 代码中存在明显的语法错误。您声称已阅读的那些答案都没有解释如何获取错误消息?
  • @ÁlvaroGonzález nop 他们中的大多数人只是声称the query 可能是错误的;错字、名称等
  • 请查看sqlsrv_errors()

标签: php sql-server


【解决方案1】:

由于查询字符串中的语法错误,查询无法执行。因此,sqlsrv_num_rows($stmt) 会引发错误。删除 $schedule_id 周围的点,使 $query 变为:

$query = "select t_schedule_id as t_schedule_id from [dbo].[APPT] where t_schedule_id = $schedule_id";

使用 sqlsrv_errors() 检查错误将有助于调试未来的问题。这将返回一个数组,并且可以使用 print_r(sqlsrv_errors(),true); 输出 - 请参阅 http://php.net/sqlsrv_errors.

【讨论】:

    【解决方案2】:

    怎么样:

    function get_appt($schedule_id,$conn){
    
        $query = "select t_schedule_id as t_schedule_id from [dbo].[APPT] where t_schedule_id = .$schedule_id.; ";
    
        $stmt = sqlsrv_query($conn,$query);
    
        if ($stmt === false){
           return 0;
        }else{
           return sqlsrv_num_rows($stmt);
        }
     }
    

    【讨论】:

    • 您的代码不会删除语法错误或检查错误消息。它是如何解决问题的?
    • @ÁlvaroGonzález - 我认为语法是有效的,也许是某些 sqlserver 特定的。如果语法错误,冰箱灯是正确的。
    【解决方案3】:

    我认为的语法是这样的:

    $query = "select t_schedule_id as t_schedule_id from [dbo].[APPT] where t_schedule_id =" .$schedule_id."; ";

    您错过了 2 个" 字符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多