繁体   English   中英

mysql_real_escape_string和'

[英]mysql_real_escape_string and ’

我正在使用mysql_real_escape_string来转义字符串,然后将其插入到我的mysql数据库中。

一切都运行正常,除了这个角色'被错过并变成了由’

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

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

请帮忙!

谢谢 :)

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

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

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

mysql_real_escape_string()只是转义一些字符(使用\\ '),使它们“安全”地推入你的查询。 您似乎与您的数据(样式化引号)和列编码类型的编码不匹配。 mysql_real_escape_string永远不会解决这类问题。

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

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

如果你已经建立了mysql连接,它将起作用:mysql_query(“SET NAMES'utf8'”);

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

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

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

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

希望它有效

<?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>

输出:

插入test asdidnamedesc )VALUES('','asd \\'lgh','knkk');

1

在此输入图像描述

mysql_real_escape_string(utf8_encode($data));

希望这会奏效。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM