使用 $row = mssql_fetch_object 打破第二个 $row?

Using $row = mssql_fetch_object breaks the second $row?

情况:

我正在编码 PHP (5.2.1) 并且想要处理一个 mssql 结果。

$sql = "SELECT foo FROM bar WHERE foo = '123'";
$ret = mssql_query ( $sql );

select 和 $ret 结果很好,我测试了很多次。

var_dump($ret); //output is: resource(597) of type (mssql result)

问题:

我的代码包含 $row = mssql_fetch_object ( $ret ); 两次,因为我复制并粘贴了一些代码。像这样:

$row = mssql_fetch_object ( $ret );
var_dump($row);
...
...
$row = mssql_fetch_object ( $ret );
var_dump($row);

第一个 var_dump($row); 显示有效对象:

(object(stdClass)#139 (2) {
  ["XXX"]=>
  string(10) "ASDFASD"....)

但是第二个 var_dump($row);boolean(false)

这怎么可能? mssql_fetch_object() 会影响 $ret 吗?我检查了两个 $ret 结果,它们是一样的..

我错过了什么?

感谢您的帮助。

发生这种情况是因为您在完成第一个

时已经获取了对象
$row = mssql_fetch_object ( $ret );

如果您想重复使用同一行,只需再次使用 $row。

$row = mssql_fetch_object ( $ret );
var_dump($row);
...
...
var_dump($row);

函数 mssql_fetch_object 在 while() 语句中使用,因此当它 returns 为 false 时意味着结果中没有更多行。

一个简单的例子。

你做了 SELECT 那 returns 3 行。而你运行以下代码:

$row1 = mssql_fetch_object ( $ret );
$row2 = mssql_fetch_object ( $ret );
$row3 = mssql_fetch_object ( $ret );
$row4 = mssql_fetch_object ( $ret );

var_dump($row1);
var_dump($row2);
var_dump($row3);
var_dump($row4);

您将收到如下内容

array( <row 1 items> )
array( <row 2 items> )
array( <row 3 items> )
false

因为您要获取第 4 行,但是您的结果只有 3 行。

因此,您应该这样做,而不是执行上一段代码:

while($row1 = mssql_fetch_object ( $ret ))
{
     var_dump($row)
}

因此,当没有更多行时,while 退出并继续您的代码,您将收到如下内容

array( <row 1 items> )
array( <row 2 items> )
array( <row 3 items> )