【问题标题】:sqlsrv_fetch_array function in PHP does not workPHP 中的 sqlsrv_fetch_array 函数不起作用
【发布时间】:2017-03-11 15:36:41
【问题描述】:

我在我网站的很多页面中都使用了函数sqlsrv_fetch_array, 但由于某种原因,在特定情况下它不起作用。

我在 SQL 中手动发送了查询,它工作正常。 这是我发送的查询的结果:

4721    fino    fino@gmail.com  Apr 28 2016  7:27PM 127.0.0.1   3   3   Fino Nab    MA  educ    1   1   60  NULL    Danda

处理结果的变量名是$infoQuery

当我打印sqlsrv_num_rows($infoQuery) 时,结果为 1(正确结果)。

echo sqlsrv_num_rows( $infoQuery ); // result is 1 ( correct result )

但是当我尝试这样做时:

while( $row = sqlsrv_fetch_array( $infoQuery ) ) {
    echo "Just printing..";
}

它什么也不打印,这意味着它不起作用。 我正在使用 PHP 7、SQL SERVER 2012、windows 7。 有谁知道为什么会发生这种情况?

【问题讨论】:

  • 我没有办法弄清楚您在此处提供的信息出了什么问题。你说你在你网站的其他页面上成功地使用了sqlsrv_fetch_array,所以这个特定查询的执行方式一定有问题。尝试创建一个 minimal reproducible exampleedit 您的问题以包含它。
  • 问题不在于查询,当我将它直接发送到 SQL 时它运行完美。
  • 我明白这一点。我的意思是它在 PHP 中的执行方式一定有问题。
  • 在那个循环之前你是否使用过sqlsrv_fetch_array($infoQuery),例如在var_dump() 中?如果是这样,您已经“读取”了查询返回的第一个(仅在这种情况下)行,因此,到循环时,没有更多行要读取,您的 while 循环将返回 @ 987654333@ 并没有运行。

标签: php sql sql-server sqlsrv


【解决方案1】:

确保加载 README 中列出的两个 dll: 扩展=php_sqlsrv_56_ts.dll 扩展=php_pdo_sqlsrv_56_ts.dll

【讨论】:

  • 有必要吗?我已经多次使用 sqlsrv 函数(包括 sqlsrv_fetch_array ),这是我第一次遇到问题。
【解决方案2】:

我有同样的问题,我用这个,它解决了我的问题

$conn = new PDO("sqlsrv:Server=$serverName;Database=$dbName", "$username", "$password");

$stmt = $conn->prepare("SELECT COR.CourseID AS id");

$stmt->执行();

$ind = 0;

while ($row = $stmt->fetch()) {

  print_r($row);

}

【讨论】:

    【解决方案3】:

    试试这个:

    while( $row = sqlsrv_fetch_array( $infoQuery, SQLSRV_FETCH_ASSOC ) ) {
        echo "Just printing..";
    }
    

    如果你得到错误,你可以检查你得到的错误:

        foreach( sqlsrv_errors() as $error ) {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
            echo "code: ".$error[ 'code']."<br />";
            echo "message: ".$error[ 'message']."<br />";
        }
    

    【讨论】:

    • 你做了var_dump(sqlsrv_fetch_array( $infoQuery, SQLSRV_FETCH_ASSOC )); 吗?
    • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及为什么以这种方式完成,不仅是为了 OP,也是为了 SO 的未来访问者。跨度>
    • var_dump(sqlsrv_fetch_array( $infoQuery, SQLSRV_FETCH_ASSOC ));打印“布尔(假)”。
    • php.net/manual/ru/function.sqlsrv-fetch-array.php 那么查询似乎有问题。 Returns an array on success, NULL if there are no more rows to return, and FALSE if an error occurs.
    • 那么为什么函数 sql_srv_nunrows 返回 1?我在将查询发送到 sqlsrv_query 之前一秒钟打印了查询并手动发送,它工作正常。
    猜你喜欢
    • 2011-09-04
    • 2015-09-02
    • 2011-06-02
    • 2011-04-24
    • 2016-12-14
    • 2014-03-17
    • 2018-11-10
    • 2020-11-04
    • 2012-12-12
    相关资源
    最近更新 更多