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

时间:2014-12-08 00:39:15

标签: php jquery mysql pdo

我在插入具有特殊字符的值时遇到问题,例如“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数据库看起来很奇怪?

1 个答案:

答案 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。