PDO绑定参数更改了我的字符串


PDO bindParam changes my string

我有以下代码将一些数据插入我的数据库:

$query = "INSERT INTO `questions`(`title`,`content`,`set`,`date`) VALUES(:title,:content,:set,:date)";
    $stmt = $db -> prepare($query);
    $stmt -> bindParam(':title',$title,PDO::PARAM_STR);
    $stmt -> bindParam(':content',$content,PDO::PARAM_STR);
    $stmt -> bindParam(':set',$set,PDO::PARAM_INT);
    $stmt -> bindParam('date',$date,PDO::PARAM_STR);
    $stmt -> execute();
    echo '<script>alert("שאלה נוספה בהצלחה");</script>';

问题是,每当我在数据库中查看插入的信息时,它都会变成奇怪的字符串,例如:&#1489;&#1506;&#1489;&#1512;&#1497;&#1514;我不知道为什么会这样!

附言如果我插入英文字符串,没关系。它在数据库中显示为正确的英语。当我用我的语言插入数据时,就会发生这种情况。

可能是字符集和排序规则有问题。您可能需要将它们设置为 UTF-8

http://en.wikipedia.org/wiki/UTF-8

从绑定中删除 PDO::P ARAM_STR,然后在您的代码中使用它一次:

mb_internal_encoding("UTF-8"); //for utf unicodes
internal_encoding("your unicode"); //

default_charset = "your unicode";

检查了一会儿后,我发现了问题所在。

我从中获取输入的表单不在 HTML 标签中,因为它是一个快速且非常简单的界面。

在考虑了一下之后,我尝试在适当的HTML标签中做表单。我在这里附上了<form>标签:

    <html dir="rtl">
    <head>
    <title>Insert a new question</title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> // important line
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  </head>
 <body>
<!-- form here -->
</body>
</html

完成此操作后,给出的输入是适当的希伯来字母,而不是HTML实体代码。

希望这会帮助某人。

每当我在数据库中查看插入的信息时,它都会变成奇怪的字符串,例如:&#1489;&#1506;&#1489;&#1512;&#1497;&#1514;我不知道为什么会发生这种情况!

我有。
这些符号与数据库完全无关。
它是HTML编码,mysql永远不会以这种方式对您的数据进行编码。

它是其他一些软件,可以在将数据添加到数据库之前转换您的数据。您只需输出这些字符即可轻松验证它(当然,不是由浏览器呈现的)。很可能是某种"全消毒"功能,您绝对必须摆脱。