我在插入具有特殊字符的值时遇到问题,例如“Renè”。名称“Renè”在我的数据库中显示如下:“René”
我试图将数据库中的字段更改为“utf8_general_ci”,这对我没有帮助,所以它可能在我的代码中。
该名称来自JQuery Ajax请求,我能够在被调用的.php文件中正确回显此名称。
$fullname = $_POST['playersearch'];
echo "<div class='n_ok'><p>Inserted $fullname successfully (PlayerID is $id)</p></div>";
我使用PDO连接到我的数据库,并指定了UTF-8字符集:
$db = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass,array('charset'=>'utf8'));
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
在此处插入数据库:
$stmt = $db->prepare("INSERT INTO PlayerCards (playerName, buyPercentage) VALUES (?, ?)");
$stmt->bindParam(1, $fullname);
$stmt->bindParam(2, $buypercentage);
为什么我的MySQL数据库看起来很奇怪?
答案 0 :(得分:2)
根据手册:
它指定PDO中的字符集语法用作:
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
同时阅读该页面上的警告:
警告强> 以下示例中的方法只能用于与ASCII共享相同的低7位表示的字符集,例如ISO-8859-1和UTF-8。使用具有不同表示形式的字符集的用户(例如UTF-16或Big5)必须使用PHP 5.3.6及更高版本中提供的charset选项。
因此,在您的情况下,通过更改
array('charset'=>'utf8')
到
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
如果您希望在连接后运行初始化命令;以下评论中有更多内容。
菲尔在评论中指出; 连接后无需运行初始化命令。
也可以使用mysql:host=$dbhost;dbname=$dbname;charset=utf8
。
第四个参数(options数组)用于连接上设置的特定驱动程序选项(通常是PDO属性)。
谢谢Phil。