Php 这个PDO代码对SQL注入足够安全吗?

Php 这个PDO代码对SQL注入足够安全吗?,php,html,sql,pdo,code-injection,Php,Html,Sql,Pdo,Code Injection,正如标题所说:这段代码在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-&

正如标题所说:这段代码在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();
?>
有没有更好的方法来防止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();
?>

如果您仅使用上述代码中的准备状态,则您是安全的。没有其他可能用SQL注入攻击您的站点


prepare语句会压缩来自命令的数据,因此不能将任何内容作为SQL语句的一部分执行。

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


请参阅:

是,此PDO代码在SQL注入中足够安全。

这个问题更适合于。CodeReview是一个问答网站,用于共享您正在进行的项目中的代码以供同行评审。