如何转义输入但保存未转义到数据库中

vau*_*boy 3 php mysql escaping

据说为了防止SQL注入,应该过滤输入数据,例如.使用addslashes或mysql_real_escape_string取决于使用的连接模块

但是,使用addslashes将使用addslashes转义的数据保存到数据库中,因此用户姓氏将保存为O \'Reilly而不是O'Reilly.需要使用stripslashes正确显示它.

那么如何使用addslashes并保存到数据库中而不用斜杠?它实际上是应该做的吗?

pro*_*son 6

你不要使用addslashes你使用适当的DB特定的转义函数mysql_real_escape_string.

如果您正在使用PDO,那么使用预准备语句将作为绑定过程的一部分转义变量.在这种情况下,您需要做的就是:

$pdo = new PDO($dsn, $user, $name);
$stmt = $pdo->prepare('INSERT INTO your_table (col1, col2,col3) VALUES (?, ?, ?)');
$stmt->execute(array('value 1', 'value 2', 'value 3');
Run Code Online (Sandbox Code Playgroud)

或者为了额外的可读性和更高的重用性,您可以使用命名参数:

$pdo = new PDO($dsn, $user, $name);
$stmt = $pdo->prepare('INSERT INTO your_table (col1, col2,col3) VALUES (:col1, :col2, :col3)');
$stmt->execute(array(':col1' =>'value 1', ':col2' =>'value 2', ':col3' =>'value 3');
Run Code Online (Sandbox Code Playgroud)