【问题标题】:Which character set is safe for Mysqli->real_escape_string哪个字符集对 Mysqli->real_escape_string 是安全的
【发布时间】:2013-10-23 05:39:08
【问题描述】:

同时,我在PHP.net#mysqli_real_escape_string 中阅读了有关mysqli->real_escape_string 的信息。几行,我不明白它们的意思,以及使用real_escape_string时哪个字符集是安全的

注意安全:默认字符集

字符集必须在服务器级别设置,或者使用 影响的 API 函数 mysqli_set_charset() mysqli_real_escape_string()。请参阅有关字符的概念部分 设置以获取更多信息。

有人可以解释一下,utf-8default latin 是否安全:-

这是他们的代码 sn-p 描述这里的情况http://in1.php.net/manual/en/mysqli.real-escape-string.php

这是什么意思?

<?php

$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

// Will not affect $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8");

// Will not affect $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8");

// But, this will affect $mysqli->real_escape_string();
$mysqli->set_charset('utf8');

?>

谢谢

【问题讨论】:

    标签: php mysql character-encoding mysqli


    【解决方案1】:

    任何字符集,如果你使用mysqli_set_charset()

    此外,utf-8 和默认 latin 是安全的,即使您不安全。

    这个过程涉及两个方面。一个服务器和一个客户端。客户端是您的 PHP 脚本。所以,仅仅因为转义是在客户端完成的(即在 PHP 中),PHP 必须知道如何转义数据。这就是mysqli_set_charset() 的确切含义——它要么让服务器知道传入的数据编码,要么让real_escape_string 知道编码数据的内容。

    虽然SET NAMES 查询只完成部分工作,只通知服务器,而real_escape_string 处于默认状态。但是,utf-8 和默认的latin 无论如何都是无懈可击的。

    【讨论】:

    • 如果我不使用任何mysqli_set_charset() 函数,我还安全吗?
    猜你喜欢
    • 2010-10-03
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多