2009-08-19 99 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”' –