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

时间:2015-01-07 10:21:26

标签: php sql-server

情况:

我正在编写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结果,它们是相同的..

我错过了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

函数mssql_fetch_object在while()语句中使用,因此当它返回false时,表示结果中没有更多行。

一个简单的例子。

你做一个返回3行的SELECT。然后运行以下代码:

$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)
}

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

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