我想知道爲什麼您可以在查詢執行之前和之後設置提取模式,並且結果仍然使用給定的提取模式...?PDO提取模式 - 查詢之前/之後
這意味着PDO從數據庫服務器中檢索查詢結果爲數字和關聯?嗯...
是否有可能只能檢索一個..?數字結果還是關聯結果?
這兩個例子返回同樣的結果。如果我離開setFetchMode
出兩個數字和assoc命令結果打印
之前執行
$sth = $dbh->prepare("SELECT REFERENCED_TABLE_NAME table_name, REFERENCED_COLUMN_NAME column_name\n"
."FROM KEY_COLUMN_USAGE\n"
."WHERE REFERENCED_TABLE_NAME IS NOT NULL && REFERENCED_COLUMN_NAME IS NOT NULL\n"
."GROUP BY REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();
echo '<pre>';
foreach($sth as $row){
print_r($row);
}
echo '</pre>';
執行後
$sth = $dbh->prepare("SELECT REFERENCED_TABLE_NAME table_name, REFERENCED_COLUMN_NAME column_name\n"
."FROM KEY_COLUMN_USAGE\n"
."WHERE REFERENCED_TABLE_NAME IS NOT NULL && REFERENCED_COLUMN_NAME IS NOT NULL\n"
."GROUP BY REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME");
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
echo '<pre>';
foreach($sth as $row){
print_r($row);
}
echo '</pre>';
好的,所以我需要調用'$ row = $ sth-> fetch(PDO :: FETCH_ASSOC)'而不是? – clarkk
取決於你想要的東西。 fetch只從服務器獲取一行,而不是全部 - 而foreach和fetchAll每行都會回退你。如果您擔心性能問題,那麼使用foreach和setFetchMode(執行前或執行後)不會更慢,因爲您在實際讀取之前設置了獲取模式 - PDO不會以任何方式爲您創建數值數組。 – Dutow
謝謝..寫得很好的說明:) – clarkk