据说为了防止SQL注入,应该过滤输入数据,例如。使用addslashes或mysql_real_escape_string取决于使用的连接模块
但是,使用斜杠将使用addslashes转义的数据保存到数据库中,因此用户姓氏将保存为O \'Reilly而不是O'Reilly。需要使用stripslashes正确显示它。
那么如何使用addslashes并保存到数据库中而不使用斜杠?实际上它应该是这样做的吗?
答案 0 :(得分:6)
您不能使用addslashes
使用适当的特定于数据库的转义函数,例如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');
OR为了额外的可读性和更高的重用性,您可以使用命名参数:
$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');
答案 1 :(得分:0)
addslashes
应该是一种适合所有人的逃避机制。如果MySQL转义addslash
- 转义字符串,当然包含addslash
斜杠的值将保存到数据库中。使用或者,不是两者都使用。
话虽如此,不要使用addslashes
。它没有任何实际意义。在适当的情况下使用特定的转义机制。即,仅使用mysql_real_escape_string
。或准备好的陈述,以避免开始的整个逃避混乱。
答案 2 :(得分:0)
如果您使用预准备语句(例如,通过PDO或mysqli库),则无需转义或过滤任何内容。