Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO插入带有特殊字符的值_Php_Jquery_Mysql_Pdo - Fatal编程技术网

Php 使用PDO插入带有特殊字符的值

Php 使用PDO插入带有特殊字符的值,php,jquery,mysql,pdo,Php,Jquery,Mysql,Pdo,我在像“Renè”这样的名称中插入带有特殊字符的值时遇到问题。“Renè”这个名字出现在我的数据库中,就像这样:“RenÃè” 我试图将数据库中的字段改为“utf8\u general\u ci”,但这没有帮助,所以这可能是我代码中的内容 该名称来自jQueryAjax请求,我能够在被调用的.php文件中正确地回显该名称 $fullname = $_POST['playersearch']; echo "<div class='n_ok'><p>Inserted $ful

我在像“Renè”这样的名称中插入带有特殊字符的值时遇到问题。“Renè”这个名字出现在我的数据库中,就像这样:“RenÃè”

我试图将数据库中的字段改为“utf8\u general\u ci”,但这没有帮助,所以这可能是我代码中的内容

该名称来自jQueryAjax请求,我能够在被调用的.php文件中正确地回显该名称

$fullname = $_POST['playersearch'];
echo "<div class='n_ok'><p>Inserted $fullname successfully (PlayerID is $id)</p></div>";
插入数据库的操作发生在以下位置:

    $stmt = $db->prepare("INSERT INTO PlayerCards (playerName, buyPercentage) VALUES (?, ?)");
    $stmt->bindParam(1, $fullname);
    $stmt->bindParam(2, $buypercentage);
为什么它在我的MySQL数据库中看起来如此奇怪?

根据手册:

它指定PDO中的字符集语法用作:

$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
另请阅读该页上的警告:

警告 下例中的方法只能用于与ASCII具有相同低位7位表示的字符集,如ISO-8859-1和UTF-8。使用具有不同表示形式(如UTF-16或Big5)的字符集的用户必须使用PHP5.3.6及更高版本中提供的字符集选项

因此,在你的情况下,通过改变

array('charset'=>'utf8')

如果您希望在连接后运行初始化命令;更多关于这方面的评论见下文


如菲尔在评论中所述;连接后无需运行初始化命令

使用
mysql:host=$dbhost;dbname=$dbname;也可以使用charset=utf8

第四个参数(选项数组)用于连接上设置的特定驱动程序选项(通常为PDO属性)


谢谢你,菲尔。

不用
array('charset'=>'utf8')
使用
array(PDO::MYSQL\u ATTR\u INIT\u COMMAND=>“SET NAMES utf8”)
这就是解决方案。非常感谢。不客气。你不妨删除这个问题。我不需要回答,除非你真的想让我也回答,并且为了结束这个问题,干杯,我想为其他有类似问题的人保留它。我在一个php帮助页面上处理了这个原始的pdo脚本,所以可能其他人也这么做了,并且有一天会想,在DSN上设置它有什么错,例如
mysql:host=$dbhost;dbname=$dbname;charset=utf8
?在DSN中设置它有什么问题?连接后无需运行初始化命令。@Phil TBH Phil,我不知道这一点,我很乐意将其添加到我的答案中,并引用您的评论。但是,
charset=utf8
是否不等于OP使用的
'charset'=>'utf8'
而失败?否。DSN字符串用于连接。第四个参数(选项数组)用于连接上设置的特定驱动程序选项(通常是PDO属性)。@Phil感谢您提供的附加信息Phil,我在回答中添加了这些信息,干杯
array('charset'=>'utf8')
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")