0

だから、私は以前にこの問題を抱えていて、それを解決したことはありませんでしたが、今は再び問題を抱えており、本当に解決したいと思っています.

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 $row で毎回 true になります。(もちろん、各ユーザーに対して行うため、これにはさらに多くの出力があります...)

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;
}
4

1 に答える 1

1

疑う

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

と解釈されている

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

つまり&& $fetchLimit > 0、代入に が含まれています。演算子の優先順位については、PHP のマニュアルを参照してください。

に変更してみてください

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

また

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

(andは より優先順位が低い=)

于 2012-07-25T10:47:52.957 に答える