我用过mysql_real_escape_string()
在将数据插入数据库时对数据进行清理,从数据库检索数据时可以再次使用它吗?
最佳答案
随时使用都不行。 MySQL 扩展已被弃用。请改用 PDO 或 MySQLi。
在查询中使用数据时,请使用参数绑定(bind)而不是字符串操作来进行清理。
您无需在检索时清理数据。如果您要在 HTML 页面中显示数据,请改用 htmlspecialchars()
或 htmlentities()
函数。
更新
解释一下,您不应该存储带有转义字符的数据。最好的方法是存储收到的数据而不进行修改(这是在存储之前用于过滤输入的任何验证的外部)。
PDO和MySQLi都支持参数绑定(bind),这是存储 volatile 数据的最安全的方式,例如(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/