这个准备好的语句能否阻止SQL注入?

时间:2015-08-15 11:11:07

标签: php sql pdo sql-injection

$string = trim($_POST['string'])
$sql = "INSERT INTO table (string) VALUES(:string)";
$query = $db->prepare($sql);
$query->execute(array(
    ":string" => $string
));

这段代码可以阻止SQL注入吗?

编辑:
这是我对数据库的连接。这段代码的字符集是否允许执行上面的代码块并阻止SQL注入?

//database credentials
define('DBHOST','localhost');
define('DBUSER','root');
define('DBPASS','');
define('DBNAME','table');

//application address
define('DIR','http://localhost/');
define('SITEEMAIL','noreply@example.com');

try {

//create PDO connection 
$db = new PDO("mysql:host=".DBHOST.";port=3306;dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

} catch(PDOException $e) {
//show error
echo 'Looks like server is down please check back later';
exit;
}

1 个答案:

答案 0 :(得分:3)

是的,它会阻止SQL注入,因为

Prepared语句使用绑定参数。

Prepared Statements不会将变量与SQL字符串组合在一起,因此攻击者无法修改SQL语句。

Prepared Statements将变量与已编译的SQL语句组合在一起,这意味着SQL和变量是单独发送的,变量只是被解释为字符串,而不是SQL语句的一部分。