情况:
我正在编写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结果,它们是相同的..
我错过了什么?
感谢您的帮助。
答案 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> )