【发布时间】:2014-04-22 13:49:06
【问题描述】:
由于某种原因,下面的 while 循环永远不会触发。 所有这些都在一个类中。
$code = $this->get_postal_state_no('Western Cape');
private function get_postal_state_no($psn)
{
$sql = "
SELECT
no
FROM
ct_state
WHERE
name LIKE('".$psn."');";
$stmt = sqlsrv_query($this->conn1, $sql);
// This statement is not false, so the error handling does not happen, this is expected.
if($stmt === FALSE)
{
if(($errors = sqlsrv_errors()) != NULL)
{
foreach($errors as $error)
{
$sqlstate = $error['SQLSTATE'];
$code = $error['code'];
$sqlmessage = $error['message'];
}
}
$msg = 'Error in $stmt in get_postal_state_no() method.';
$this->do_error_log($error_msg, $sqlstate, $code, $sqlmessage, $msg, __LINE__, __FILE__, __FUNCTION__, __CLASS__, __METHOD__);
sqlsrv_free_stmt($stmt);
}
//This loop is never entered. This is not expected.
while($obj = sqlsrv_fetch_object($stmt))
{
echo "I am here now";
break;
if(!empty($obj->no) && $obj->no != '')
{
echo "Hello, I exist";
break;
// This break never happens
return $obj->no;
}
else
{
echo "Hello, I don't exist";
break;
// This break never happens
$code = $this->sp_aa_iud_ct_state($psn);
return $code;
}
sqlsrv_free_stmt($stmt);
}
}
有人知道为什么吗?我正在使用 php_sqlserv 驱动程序。 SQL Server Profiler 将查询第一部分执行。
谢谢
J
【问题讨论】:
-
您是否已经进行了任何调试?查询实际上返回 >0 行吗?您是否收到任何错误/通知(可能被抑制)?
while()真的到达了吗? -
@kingkero 是的,我有。我的自定义日志记录没有错误。 while 循环中的 if 语句要么返回一个代码(如果有),或者如果没有,则调用另一个方法来创建新代码并将其返回给该方法。如果我在此之前中断,它会中断。如果我在任何 if 条件期间中断,它只会继续,因为似乎已经到了 while,但从未执行过。
-
来自
sqlsrv_fetch_object上的 PHP 文档:成功时返回一个对象,如果没有更多行要返回,则返回 NULL,如果发生错误或指定的类不存在,则返回 FALSE . 因此,请考虑在您的 while 子句中使用适当的条件,否则它可能会以无限循环结束。
标签: php sql-server tsql