为什么在执行Esc_SQL之后没有重新应用行回车?

时间:2021-11-08 作者:Adrien Villalonga

我正在尝试显示数据库中的数据。该数据是通过类似bellow的esc\\u sql转义的。

但当我在echo, 换行符打印为字符(“\\”、“r”、“\\”、“n”)。

$data = esc_sql("
    sample data with line returns
");

echo $data; // Output = \\r\\n    sample data with line returns\\r\\n
执行esc\\u sql后,重新应用行返回的最佳方法是什么?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

那不是什么esc_sql 是用于或应该用于什么。

安全地转义SQL查询中的变量要使变量对SQL查询安全,请使用$wpdb->prepare, e、 g。

$table_name = "{$wpdb->prefix}myTable";
$myID = 12;
 
$wpdb->query(
    $wpdb->prepare(
        "UPDATE `$table_name` SET `your_column_1` = 1 WHERE `$table_name`.`your_column_id` = %d",
        $myID
    )
);
请注意$myID 使用安全地插入到SQL查询中$wpdb->prepare, 并且不直接包含在查询字符串中。esc_sql 此处不使用。

安全地转义查询结果

要在输出时转义从数据库检索到的数据,请使用与所显示的上下文匹配的函数

  • esc_html 对于非HTML文本esc_attr 对于HTML标记属性esc_url 对于URLwp_kses_post 对于贴子内容中允许使用标签的内容,我应该何时使用esc_sql?非常、非常、很少:

    通常应该使用wpdb::prepare()准备查询。有时,需要或有用点转义。一个示例是准备在in子句中使用的数组。

    正确使用此功能时要小心。它将仅转义要在查询中的字符串中使用的值。也就是说,它只为SQL中引号内的值提供转义(如字段=“{$escaped\\u value}”)。如果您的值不在引号内,那么您的代码仍然容易受到SQL注入的攻击。例如,这很容易受到攻击,因为在SQL查询中,转义值没有被引号括起来:ORDER by{$escape\\u value}。因此,此函数不会转义无引号的数值、字段名或SQL关键字。

    https://developer.wordpress.org/reference/functions/esc_sql/

    大多数WP开发人员永远不会使用或遇到esc_sql 这是一件好事。

相关推荐

在WP站点上显示SQL查询结果

我希望这不是多余的-但似乎总是有足够多的不同,我无法让事情顺利进行。我正在我的functions.php 文件-所有其他功能工作正常。$query = $mydb->get_results("select * from table"); //这在mysql中运行得很好,我可以做count(*)之类的事情并将其报告回来。但无论出于什么原因,我都无法让表返回输出到wordpress页面的结果return "$query"; return "