PDO防止sql注入原理

PDO預處理

$pdo = new PDO("mysql:host=localhost;dbname=test","user","pwd");
$sql = "insert into user(name,age) values(?,?)";   // ?號的方式
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
//PDO有一項參數,名爲PDO::ATTR_EMULATE_PREPARES ,表示是否使用PHP本地模擬prepare
$stmt = $pdo->prepare($sql);
$stmt->execute(array('test77',55));
echo $stmt->rowCount();  //返回受影響的行數

PDO防止sql注入原理

在php5.3.6之後,pdo不會在本地對sql進行拼接然後將拼接後的sql傳遞給mysql server處理(也就是不會在本地做轉義處理)。pdo的處理方法是在prepare函數調用時,將預處理好的sql模板(包含佔位符)通過mysql協議傳遞給mysql server,告訴mysql server模板的結構以及語義。當調用execute時,將兩個參數傳遞給mysql server。由mysql server完成變量的轉移處理。將sql模板和變量分兩次傳遞,即解決了sql注入問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章