6

我有一个注册表单,它将插入到成员表中,排序规则在 中utf8_general_ci,我SET NAMES utf8在 php 脚本中使用,好的,问题出在此处,我无法插入纯字母以外的字符串,我尝试在中输入“Hélène”一个表单字段,在运行 sql 查询后,我检查了我的 db 表,该字段被插入为“H”,只要字符串带有特殊字母表(例如é, ř后面的​​ on ),就不能插入其余的字母表。

有人可以帮忙吗?谢谢。

解决方案:

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

mysql_query("SET NAMES utf8");

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

谢谢大家的建议。

4

3 回答 3

2

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

编辑:-

这个答案是一年前发布的。现在mysql_real_escape_string() for php 5 将在mysqli::real_escape_string这种格式下工作。请在这里查看

于 2013-02-20T10:11:56.790 回答
1

如果你不想担心这么多不同的字符集编码,或者如果 htmlentities 不适合你,这里是替代方案:我使用 mysqli DB 连接(和 PHPV5)Form post 来写入/插入到 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
于 2014-01-02T13:06:30.410 回答
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();
于 2019-05-31T01:12:18.823 回答