2
不管是否執行PDO PDO::ATTR_EMULATE_PREPARES
設置爲真假,如何判斷PDO是否真的在模擬語句或者它們是否由本機驅動程序處理?如何判斷PDO是否正在模擬語句?
不管是否執行PDO PDO::ATTR_EMULATE_PREPARES
設置爲真假,如何判斷PDO是否真的在模擬語句或者它們是否由本機驅動程序處理?如何判斷PDO是否正在模擬語句?
好吧,它似乎不可用作爲PDO連接處理程序屬性,因爲此設置可以在運行時更改。
但有可能爲語句處理程序獲取它。
因此,如果您想在啓動任何實際語句之前知道仿真狀態,則必須使用假查詢。作爲一個附加的證明,我的上露出仿真小動作可以使用:
try {
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
$sth = $pdo->prepare("SELECT 1");
$emul = $sth->getAttribute(PDO::ATTR_EMULATE_PREPARES);
var_dump($emul);
$sth = $pdo->prepare("SELECT 1 LIMIT ?,?");
$sth->execute(array(1,2));
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
$sth = $pdo->prepare("SELECT 1");
$emul = $sth->getAttribute(PDO::ATTR_EMULATE_PREPARES);
var_dump($emul);
$sth = $pdo->prepare("SELECT 1 LIMIT ?,?");
$sth->execute(array(1,2));
} catch (PDOException $e) {
echo $e->getMessage();
}
輸出
bool(false)
bool(true)
SQLSTATE[42000]: Syntax error or access violation:
1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near ''1','2'' at line 1
意味着在第二種情況下PDO只是模擬,進而使格式化爲字符串值導致一個解析錯誤。
雖然我沒有看到這種信息很多用途。爲什麼不把它設置爲你想要的任何條件?
不確定它是否可能,因爲它的全部目的是隱藏到php代碼,如果PDO正在模擬或不。 – T0xicCode 2013-01-16 17:02:49