我不明白PDO關於存儲過程的行爲,我需要一些解釋(也許解決我的問題)。爲什麼我需要使用存儲過程的PDOStatement :: nextRowSet來獲取結果?
我使用SQL Server 2008 R2與PHP 5.4和Apache 2.2。 我打電話使用PDO(帶司機SQLSRV)有兩個參數的存儲過程:
$pdoStmt = $pdo->prepare('MY_STORED_PROCEDURE ?, ?');
$pdoStmt->bindValue(1, 'MyValue1', PDO::PARAM_STR);
$pdoStmt->bindValue(2, 'MyValue2', PDO::PARAM_STR);
$pdoStmt->execute();
好了,在這裏,一切都完美的作品。所調用的存儲過程的結果是一個數組,所以我應該使用fetchArray()。所以我這樣做:
$result = $pdoStmt->fetchArray();
但是結果是空的。我不知道爲什麼,我必須撥打幾個時間nextRowSet()才能得到結果。所以我這樣做:
do {
$result = $pdoStmt->fetchAll(PDO::FETCH_ASSOC);
} while ($pdoStmt->nextRowSet());
然後我有我的結果! Yay ....
當我直接在SQL Server中執行存儲過程(我有一個正確的結果與相同的參數)存儲過程。
那麼爲什麼我必須這樣做,有沒有解決方案呢?我不想撥打nextRowSet()什麼也沒有...
在此先感謝您的回覆。
感謝您的答覆!我試過但仍然是,我有同樣的行爲。 – 2014-10-17 16:17:57
@VincentNicopolsky你的程序包含多少個sql語句?如果有多個,你只需要'nextRowSet()'。 – jeroen 2014-10-17 16:21:17
有條件檢查參數是否爲空。如果它是空的,我做一個'SELECT'FALSE'AS RESULT',否則我做一個'SELECT R1,R2 FROM MyTable WHEN R1 = @ MyValue1 AND R2 = @ MyValue2'。 只有這個: - / – 2014-10-17 16:43:16