我多年來一直在使用ADOdb作爲我的數據庫抽象和查詢緩存層。最近,我轉向準備好的聲明,主要是爲了安全,並對他們(或不)實施的方式感到好奇。如何檢查ADOdb中的模擬預處理語句?
引用來自Prepare方法的文檔:「返回包含第一個數組元素中的原始sql語句的數組;該陣列的其餘元素是依賴於驅動程序的。如果出現錯誤,或者我們正在模擬Prepare(),則返回原始的$ sql字符串。」
測試語句變量與:
$stmt = $db->Prepare("SELECT * FROM pages WHERE id = ?");
print_r($stmt);
連接上開設有‘MySQL的’或‘mysqli的’參數僅返回原來的查詢字符串 - 這意味着準備語句是模仿,我猜。與「PDO_MYSQL」返回打開的連接(從print_r的()):
Array (
[0] => SELECT * FROM pages WHERE id = ?
[1] => PDOStatement Object ([queryString]=>SELECT * FROM pages WHERE id = ?)
)
我可以把這個作爲一個真正的預處理語句的確鑿的證據?如果沒有,是否有人知道檢查服務器端的快速和骯髒的方法(在查詢日誌或可能在MySQLProxy中查找的東西)?我試着讀庫源,但迷路了一半......
好吧,我去了一個狂歡的測試設置查詢日誌在MySQL和嘗試不同的連接:整個事件的混亂比我想象的!帶有pdo_mysql驅動程序的ADOdb確實發出PDO-> prepare()指令 - 它是PDO itsef,然後模擬一個準備好的語句!似乎真正PS的唯一方法是使用本機mysqli函數並放棄SELECT *。 – djn 2010-12-02 06:25:04