Php PDO bindParam更改我的字符串

Php PDO bindParam更改我的字符串,php,pdo,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(':co

我使用以下代码将一些数据插入数据库:

$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; 我不知道为什么会这样


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

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


从绑定中删除PDO::PARAM_STR并 在代码中使用此选项一次:

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

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

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


它是在将数据添加到数据库之前转换数据的其他软件。当然,只需输出这些不是由浏览器渲染的字符,就可以轻松地验证它。最有可能的是它的某种完全消毒的功能,你一定要去掉它。

在检查了一段时间后,我发现了问题所在

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

考虑到这一点后,我尝试在适当的HTML标记中创建表单。我已将标签附于此:

    <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实体代码


希望这能对其他人有所帮助。

检查表上的编码。您可能需要将其更改为另一种编码。@aynber该编码是UTF-8-GENERAL\u CI,是否能与我的languageMy unicode完美配合?我应该在那里打什么?顺便说一句,我的数据库删除如下:$DB=newpdo'mysql:host='。$host';dbname='.$dbname,$user,$password,arrayPDO::MYSQL\u ATTR\u INIT\u命令=>设置名称utf8;我该怎么做:o?如果您使用的是MySQL,请尝试:alterDatabaseName字符集utf8 COLLATE utf8\u general\u ci;或者,如果需要表格,请更改表格表格名称,将其转换为字符集utf8 COLLATE utf8\u general\u ci;你可以在上面看到我的代码。你看到任何消毒功能了吗?是的,如果我回音的话,它会正确地显示出来。此外,当我从数据库中检索数据时,它会正确显示。但是如果我想最多存储40个字符呢?它会将其转换为数百个,因此不会存储所有内容!当然,您必须看到这些不是由浏览器渲染的字符。请不要争辩。老实说,你的情况很愚蠢也很清楚。bindParam永远不会更改任何字符串。我没有争论或其他任何事情。如果bindParam不更改字符串,还有什么可以更改的?页面上没有其他功能。我发布的代码前面的行是$title=$\u POST['title'];然后直接绑定到:标题。那是什么原因呢?我真的没有发现任何错误,它只是一个基本的代码首先在浏览器中回显您的标题,然后查看HTML页面的源代码,而不是呈现的图片。然后开始追踪这些符号,直到它们第一次出现的地方。很高兴你终于做到了。@YourCommonSense感谢你尝试帮助我,非常感谢。我尝试了你的建议,但不幸的是结果一无所获。事实上,你的解决方案是我回答的直接结果。是我让你放弃了bindParam破坏数据的奇怪想法,并为你指明了正确的方向。所以,我很满意。干杯:我想你可以这么说。我在等待回答的同时检查其他东西。所以我试着做其他事情,放弃了bindParam,所以我不会不尝试其他任何东西,坚持我的第一次评估。但是,嘿,非常感谢:@kfirba用HTML编码页面时出现了问题,您找到了解决方案。但若你们接受你们的答案,那个将是非常好的,这样你们的问题将从未回答的类别中删除。手:
    <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