这个准备好的语句可以防止 SQL 注入吗?
Can this prepared statement prevent 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;
}
是的,它将阻止 SQL 注入,因为
准备好的语句使用绑定参数。
Prepared Statements 不会将变量与 SQL 字符串组合在一起,因此攻击者不可能修改 SQL 语句。
Prepared Statements 将变量与编译后的 SQL 语句组合在一起,这意味着 SQL 和变量是分开发送的,变量只是被解释为字符串,而不是 [= 的一部分18=] 语句。
$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;
}
是的,它将阻止 SQL 注入,因为
准备好的语句使用绑定参数。
Prepared Statements 不会将变量与 SQL 字符串组合在一起,因此攻击者不可能修改 SQL 语句。
Prepared Statements 将变量与编译后的 SQL 语句组合在一起,这意味着 SQL 和变量是分开发送的,变量只是被解释为字符串,而不是 [= 的一部分18=] 语句。