这种在 PHP 和 MySql 驱动的基于 Web 的应用程序中处理 SQL 的新安全方式的新方法,以保护代码免受 SQL 注入。我打算开始使用带有 PDO 的 mysqli。任何人都可以请概述我应该如何开始和继续。
对任何文章的任何引用也将有所帮助。
提前致谢。
创建连接
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 之外,还有其他各种获取数据的方法。您可以使用 fetchAll 一次获取所有结果的数组,而不是逐行获取。或者,您可以将信息数组作为 0 索引数组获取,或者您甚至可以将结果直接提取到类实例中(如果字段名称与类的属性一致。)
PDO 的所有文档都可以在这里找到:PHP.net PDO Manual