4

正如标题所说:这段代码对 SQL 注入是否足够安全?

有没有更好的方法来防止 SQL 注入?

<?php
$hostname   = "xxx";
$username   = "xxx";
$dbname     = "xxx";

$password   = "xxx";
$usertable  = "xxx";
$yourfield  = "xxx";

$db = new PDO('mysql:host='.$hostname.';dbname='.$dbname.'', $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$query = $db->prepare("INSERT INTO `$usertable` (first_name, last_name, username) VALUES (:first_name, :last_name, :username)");
$query->bindValue(':first_name', $_POST['first_name']);
$query->bindValue(':last_name',  $_POST['last_name']);
$query->bindValue(':username',   $_POST['username']);

$query->execute();
?>
4

3 回答 3

5

如果您只使用上面代码中的准备语句,那么您是安全的。AFIK 没有其他可能通过 SQL 注入来破解您的网站。

准备语句包含来自命令的数据,因此不能将任何内容作为 SQL 语句的一部分执行。

于 2013-03-24T10:52:19.810 回答
1

是的,准备好的查询通常对 SQL 注入几乎 100% 安全。但是,我建议也将data_type参数传递给PDO::bindParam();

请参阅:针对 SQL 注入准备好的查询是否 100% 安全

于 2013-03-24T10:52:23.007 回答
1

Yes this PDO code safe enough from SQL injection.

于 2013-03-24T10:52:24.490 回答