mysql_real_escape_string和'

时间:2011-01-19 19:29:51

标签: php mysql escaping mysql-real-escape-string

我在使用mysql_real_escape_string转义字符串之前将其插入我的mysql数据库。

一切正常,但字符被错过并被mysql转为’

我该怎么做才能解决问题?我应该使用更好的函数来逃避字符串吗?

我也担心其他人可能会被错过,并且同样会变成废话!

请帮忙!

谢谢:)

9 个答案:

答案 0 :(得分:16)

字符'不会被遗漏,它只是一个mysql不用于包装字符串的字符,不需要转义。

它变成那个奇怪的字符串的原因是因为它是一个多字节字符,你把它放在一个单字节字段中。

答案 1 :(得分:4)

您应该使用带有绑定变量的预准备语句:http://php.net/manual/en/pdo.prepared-statements.php这样您就不必担心转义任何内容。我链接到的文档中提到了这些优点。

答案 2 :(得分:2)

mysql_real_escape_string()只是逃避少数几个字符(使用\),使其“安全”地推送到您的查询中。您似乎与您的数据(样式化引号)和列编码类型的编码不匹配。 mysql_real_escape_string永远不会解决这类问题。

答案 3 :(得分:1)

这是一个花哨的报价吗?如果是这样,由于字符编码差异,它可能在您的数据库中看起来像乱码。每个表都有一个关联的字符编码,连接有自己的编码。

在查询之前尝试执行“SET NAMES utf8”。这将设置连接的编码为UTF-8。当然,如果你试图将UTF-8字符存储到latin1表中,你仍然无法获得预期的结果。

答案 4 :(得分:0)

这是一个特殊字符,你需要使用UTF编码

将此行放在您要在数据库中插入数据的页面顶部

header ('Content-type: text/html; charset=utf-8');

希望它有效

答案 5 :(得分:0)

如果您使用以下命令建立了mysql连接,它将起作用:mysql_query(“SET NAMES'utf8'”);

换句话说,如果未设置 SET NAMES'utf8',则不需要utf8_encode。

答案 6 :(得分:-1)

mysql_real_escape_string(utf8_encode($data));

希望这会奏效。

答案 7 :(得分:-1)

甚至更好的是使用PDO而不是标准的mysql。

http://www.php.net/manual/en/class.pdo.php

答案 8 :(得分:-1)

<?php
    if(isset($_GET['submit']))
    {
        mysql_connect('localhost','root','');
        mysql_select_db('test');
        $var=mysql_real_escape_string($_GET['asd']);
        $sql="INSERT INTO `test`.`asd` (`id` ,`name` ,`desc`)VALUES ('', '$var', 'knkk');";
        echo $sql."<br />";
        $res=mysql_query($sql) or die('error');
        echo $res;
    }
?>

<html>
<body>
    <form name="f1" method="get">
        <input type="text" name="asd">
        <input type="submit" name="submit">
    </form>
</body>
</html>

<强>输出:

INSERT INTO testasdidnamedesc)VALUES('','asd \'lgh','knkk' );

1

enter image description here