php - 检索期间的 mysql_real_escape_string

标签 php mysql

我用过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/

相关文章:

php - CodeIgniter 中的特征

mysql - 我有 select 返回的表,如何计算 field2 的总和,其中 f1 类似?

php - 表名作为模型 Codeigniter 中的变量

PHP 无法在 MySQL 数据库中插入值

php - 如何使用pdo php获取查询列及其在sql查询中形成的数据类型信息

php - ffmpeg 降低照片质量

php - 从 PHP 调用的 MySQL MAX(id) 产生奇怪的值

PHP 是二进制模式吗?

mysql - 选择同时喜欢苹果和香蕉的人

MySQL 查询仅使用文本中的标题大小写检索关键字