我在使用mysql_real_escape_string转义字符串之前将其插入我的mysql数据库。
一切正常,但字符’
被错过并被mysql转为’
。
我该怎么做才能解决问题?我应该使用更好的函数来逃避字符串吗?
我也担心其他人可能会被错过,并且同样会变成废话!
请帮忙!
谢谢:)
答案 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。
答案 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 test
。asd
(id
,name
,desc
)VALUES('','asd \'lgh','knkk' );
1