2009-08-19 123 views
7

這種新的安全方式處理PHP和MySql驅動的基於Web的應用程序中的SQL,以保護SQL注入代碼的安全。我打算開始在PDO中使用mysqli。任何人都可以請概述我應該如何開始並繼續。使用PDO準備的參數化查詢

任何對任何文章的引用也會有所幫助。

在此先感謝。

回答

11

要創建連接

try { 
    $db = new PDO("mysql:dbname=".DB_NAME.";host=".DB_HOST,DB_USER,DB_PWD); 
} catch (PDOException $e) { 
    die("Database Connection Failed: " . $e->getMessage()); 
} 

然後準備語句

$prep = $db->prepare("SELECT * FROM `users` WHERE userid = ':id'"); 

正如你所看到的,你標註每個你的前綴來任意字符串參數一樣「:」。然後,只需傳遞一個數組,將參數(:id)映射到執行時的值。

if (!$prep->execute(array(":id" => $userinput))) { 
    $error = $prep->errorInfo(); 
    echo "Error: {$error[2]}"; // element 2 has the string text of the error 
} else { 
    while ($row = $prep->fetch(PDO::FETCH_ASSOC)) { // check the documentation for the other options here 
     // do stuff, $row is an associative array, the keys are the field names 
    } 
} 

而不是PDO :: FETCH_ASSOC與「fetch」函數,有各種其他方式來獲取您的數據。您可以使用fetchAll一次獲取所有結果的數組,而不是逐行進行。或者您可以將信息數組作爲0索引數組,或者甚至可以直接將結果提取到類實例中(如果字段名稱與類的屬性一致)。

所有文檔PDO可以在這裏找到:PHP.net PDO Manual

+0

我相信你不需要圍繞佔位符引號:'「SELECT * FROM \'users \'WHERE userid =:id」' –