MySQL插入特殊字符

时间:2013-02-20 09:53:47

标签: php mysql special-characters

我有一个注册表单,它将插入到一个成员表中,整理位于utf8_general_ci,我在php脚本中使用SET NAMES utf8,好的,这里是问题所在,我无法插入除了纯字母之外的字符串,我尝试在表单字段中输入'Hélène',在sql查询运行之后,我用我的db表检查,字段插入为'H',其余的字母表不能在每次字符串时插入带有特殊字母,例如后面的​​é, ř

有人可以帮忙吗?感谢。

SOLUTION:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

mysql_query("SET NAMES utf8");

以上两行是接受数据库输入和网页输出的关键部分。

感谢大家的建议。

3 个答案:

答案 0 :(得分:2)

尝试在编码后插入数据。尝试mysql_real_escape_string()进行编码。然后执行插入查询。

修改: -

这个答案是在一年前发布的。现在,php 5的 mysql_real_escape_string()将以 mysqli :: real_escape_string 格式运行。请查看here

答案 1 :(得分:1)

如果您不想担心这么多不同的字符集编码或者如果不适合您,那么可以选择以下方法: 我使用mysqli DB连接(和PHPV5)表单发送/插入MySQl DB。

$Notes = $_POST['Notes']; //can be text input or textarea.

$charset = mysqli_character_set_name($link);  //only works for mysqli DB connection
printf ("To check your character set but not necessary %s\n",$charset);  

$Notes = str_replace('"', '&quot;', $Notes);  //double quotes for mailto: emails.  
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é");  //to correct double whitepaces as well
$zu  = array("&auml;","&ouml;","&uuml;","&szlig;","&Auml;","&Ouml;","&Uuml;","&nbsp;","&#233;");  
$Notes = str_replace($von, $zu, $Notes);  
echo " Notes:".$Notes."<br>" ;  
$Notes = mysqli_real_escape_string($link, $Notes); //for recommended mysqli DB connection.
//$Notes = mysql_real_escape_string($Notes); //for old deprecated mysql DB connection.

// mysqli_real_escape_string Escapes special characters in a string for use in an SQL statement

echo " Notes:".$Notes ;  //ready for inserting

答案 2 :(得分:0)

之所以不能这样做,是因为PHP禁止将一组特殊字符发送到数据库以避免sql注入之类的事情。如果希望转义,可以使用转义字符串函数,但是最好的方法是使用准备好的语句。

$connection = <"Your database connection">;
$userinput = "Special characters Hélène";
$stmt = $con->prepare("insert into `table` (`fieldname`)values(?)");
$stmt->bind_param("s",$input);
$stmt->execute();