我有一个注册表单,它将插入到一个成员表中,整理位于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");
以上两行是接受数据库输入和网页输出的关键部分。
感谢大家的建议。
答案 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('"', '"', $Notes); //double quotes for mailto: emails.
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well
$zu = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é");
$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();