This question already has answers here:
What are the best PHP input sanitizing functions?
(11个答案)
6年前关闭。
我在将数据插入数据库时使用了mysql_real_escape_string()清理数据,从数据库检索数据时是否可以再次使用它?

最佳答案

任何时候都不能用。MySQL扩展已被弃用。改用PDO或MySQLi。
在查询中使用数据时,请使用参数绑定而不是字符串操作进行清理。
检索时不需要清理数据。如果要在HTML页面中显示数据,请改用htmlspecialchars()htmlentities()函数。
更新
为了说明这一点,您不应该存储包含转义字符的数据。最好的方法是将接收到的数据存储为未经修改的数据(这是在存储之前用于过滤输入的任何验证之外)。
PDO和MySQLi都支持参数绑定,这是存储易失性数据的最安全方法,例如(PDO)

$stmt = $pdo->prepare('INSERT INTO tableName VALUES (:param1, :param2)');
$stmt->bindParam('param1', $var1);
$stmt->bindParam('param2', $var2);
$stmt->execute();

检索时,您将在数据进入时接收数据,因此不需要再次修改它。
要在HTML页面中安全地显示此数据,请使用上面列出的编码函数之一,例如
$stmt = $pdo->prepare('SELECT name FROM tableName');
$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);
?>

<p>Hello, <?= htmlspecialchars($row['name']) ?></p>

关于php - 检索期间的mysql_real_escape_string ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14741136/

10-16 02:44