使用 $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> )
情况:
我正在编码 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> )