由於某種原因,下面的while循環從不會觸發。 所有這些都在課堂內。任何人都可以告訴我他們是否在以下PHP代碼中看到錯誤?
$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服務器分析器購買第一部分執行的查詢。
感謝
Ĵ
您是否已經進行過任何調試?查詢是否實際返回> 0行?您是否收到任何錯誤/通知(可能會被抑制)? 'while()'實際到達了嗎? – kero
@kingkero是的,我有。我在自定義日誌記錄中沒有遇到任何錯誤。 while循環中的if語句或者返回一個代碼,或者如果沒有,則調用另一個創建新代碼並將其返回給此方法的方法。如果我在此之前休息,它會中斷。如果我在任何情況下中斷,它就會繼續下去,因爲它看起來好像已經達到了,但從未執行過。 – Jacques
來自'sqlsrv_fetch_object'的PHP文檔:*返回一個成功的對象,如果沒有更多的行要返回,則返回NULL,如果發生錯誤或者指定的類不存在,則返回FALSE。*因此,考慮使用適當的條件你的while子句,否則它可能會以無限循環結束。 –