2012-07-25 51 views
0

所以,我之前就遇到过这个问题,并且从未解决过这个问题,但现在我又重新解决了这个问题,我真的希望解决它。sqlsrv_fetch_array在php中返回true

在PHP文件我执行下面几行:

的问题是在querySelect(),你可以看到下面下来..

$stmt = sqlsrv_query($dbconn, "SELECT * FROM USERS"); 
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC); 
Logger::logg("ROW (not in method): " . var_export($row, true), LV); 

querySelect("SELECT * FROM USERS",$dbconn); 

而且我得到以下几点: (本第一个输出是正确的,并选择第一个用户,正如你所看到的返回一个关联数组)。然后在querySelect $行中每次都是真实的。 (有更多的这一点,因为它会为每个用户ofcourse输出...)

07/25/12 12:11:26 - ROW (not in method): array (
    'LopNr' => 1, 
    'Mail' => 'xxxx                       ', 
    'Password' => 'xxx', 
    'Auth' => '1', 
    'DisplayName' => 'xxx   ', 
    'sdsd' => xx, 
    'sdsd' => 'xxx', 
    'ts' => 1342093599, 
    'Cell' => NULL, 
    'WantsSMS' => xxx, 
). 
07/25/12 12:11:27 - Query: SELECT * FROM USERS. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 
07/25/12 12:11:27 - ROW: true. 

querySelect实现这样的:

function querySelect($query, $dbconn, $fetchLimit = 1000000) 
{ 
    $stmt = sqlsrv_query($dbconn, $query); 
    Logger::logg(LOGG_QRY_ERR_VERBOSE . $query, LV); 
    if (!$stmt) 
    { 
     Logger::logg(LOGG_QRY_ERR); 
     throw new Exception(ERR_QUERY); 
    } 
    $resultArray = array(); 
    while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) && $fetchLimit > 0) 
    { 
     Logger::logg("ROW: " . var_export($row, true), LV); 
     $resultArray[] = $row; 
     $fetchLimit--; 
    } 
    return $resultArray; 
} 

回答

1

我怀疑

$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) && $fetchLimit > 0 

正在解释为

$row = (sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) && $fetchLimit > 0) 

即它在分配中包括&& $fetchLimit > 0。有关运算符优先级,请参阅the PHP manual

尝试将其更改为

($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) && $fetchLimit > 0 

$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC) and $fetchLimit > 0 

and=较低的优先级)

+0

哦,现在你指出来,它是如此明显,谢谢! – netigger 2012-07-25 10:59:17

+0

没问题;去过也做过。乐意效劳。 – Hobo 2012-07-25 12:41:22