PDO操作,設定了ATTR_EMULATE_PREPARES屬性為false後發現還是在本地類比prepare
setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //設定禁止本地類比prepare $dbh -> setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $dbh -> exec('set names gbk');}catch(PDOException $e){ echo '資料庫連接失敗:'.$e->getMessage(); exit;}$query = "SELECT * FROM news WHERE tid=?";$stmt = $dbh -> prepare($query);$tid = $_GET['id'];//將參數添加到SQL查詢中$stmt -> bindParam(1,$tid);$stmt -> execute();?>
mysql日誌:
160614 13:14:12 27 Connect root@localhost on test 27 Query set names gbk 27 Query SELECT * FROM news WHERE tid='1' 27 Quit
發現並未像描述那樣:“設定這個屬性為false,就不會在本地進行類比prepare”
php版本 5.2.17
補充內容:
PDO::ATTR_EMULATE_PREPARES 啟用或禁用預先處理語句的類比。 有些驅動不支援或有限度地支援本地預先處理。使用此設定強制PDO總是類比預先處理語句(如果為 TRUE ),或試著使用本地預先處理語句(如果為 FALSE)。如果驅動不能成功預先處理當前查詢,它將總是回到類比預先處理語句上。
我這裡是不是因為驅動沒有成功預先處理當前查詢到導致的問題?
回複內容:
PDO操作,設定了ATTR_EMULATE_PREPARES屬性為false後發現還是在本地類比prepare
setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //設定禁止本地類比prepare $dbh -> setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $dbh -> exec('set names gbk');}catch(PDOException $e){ echo '資料庫連接失敗:'.$e->getMessage(); exit;}$query = "SELECT * FROM news WHERE tid=?";$stmt = $dbh -> prepare($query);$tid = $_GET['id'];//將參數添加到SQL查詢中$stmt -> bindParam(1,$tid);$stmt -> execute();?>
mysql日誌:
160614 13:14:12 27 Connect root@localhost on test 27 Query set names gbk 27 Query SELECT * FROM news WHERE tid='1' 27 Quit
發現並未像描述那樣:“設定這個屬性為false,就不會在本地進行類比prepare”
php版本 5.2.17
補充內容:
PDO::ATTR_EMULATE_PREPARES 啟用或禁用預先處理語句的類比。 有些驅動不支援或有限度地支援本地預先處理。使用此設定強制PDO總是類比預先處理語句(如果為 TRUE ),或試著使用本地預先處理語句(如果為 FALSE)。如果驅動不能成功預先處理當前查詢,它將總是回到類比預先處理語句上。
我這裡是不是因為驅動沒有成功預先處理當前查詢到導致的問題?
找到問題的所在了,我用的是在win下的環境,當我使用linux下的php5.2.x 環境就可以順利的進行預先處理了