PDO bindParam更改我的字符串

时间:2013-10-23 19:06:07

标签: php pdo

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

$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>';

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

P.S。如果我插入英文字符串,那就可以了。它在数据库中显示为正确的英语。当我用我的语言插入数据时会发生这种情况。

4 个答案:

答案 0 :(得分:-1)

字符集和整理可能存在问题。您可能需要将它们设置为UTF-8

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

答案 1 :(得分:-1)

从绑定中删除PDO :: PARAM_STR 在你的代码中使用它一次:

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

OR

default_charset = "your unicode";

答案 2 :(得分:-1)

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

我从输入中获取的表单不在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实体代码。

希望这会对某人有所帮助。

答案 3 :(得分:-2)

  

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

我有。
这些符号绝对与数据库无关。
它是 HTML编码,而mysql永远不会以这种方式编码你的数据。

这是一些其他软件,可以在 之前将数据转换为数据库。您可以通过输出这些字符(当然不是由浏览器呈现)轻松验证它。很可能是它的某种“全消毒”功能,你必须摆脱它。