相关疑难解决方法(0)

PDO + MySQL和破坏的UTF-8编码

我在PHP中使用带有MySQL数据库的PDO库,但如果我插入以UTF-8编码的任何数据,如阿拉伯语单词,则将其插入到数据库中,但是?????????.

在我自己的框架中,在创建PDO连接后,我发送了两个查询 - SET NAMES utf8SET CHARACTER SET utf8.它仍然无法正常工作.

例:

loadclass('PDO', array(
    sprintf(
        'mysql:host=%s;port=%s;dbname=%s',
        confitem('database', 'host'),
        confitem('database', 'port'),
        confitem('database', 'name')
    ),
    confitem('database', 'username'),
    confitem('database', 'password'),
    array('PDO::ATTR_PERSISTENT' => confitem('database', 'pconnect'))
));
$this->query('SET NAMES ' . confitem('database', 'charset'));
$this->query('SET CHARACTER SET ' . confitem('database', 'charset'));
Run Code Online (Sandbox Code Playgroud)

解决方法:使用json_encode函数在将数据插入数据库之前转换数据,并json_decode在获取后使用它进行解码.这就是我现在这样做的方式.

php mysql pdo character-encoding

30
推荐指数
2
解决办法
6万
查看次数

PDO连接:使用SET NAMES/CHARACTER SET的UTF-8声明?

根据php.net,StackOverflow和其他信任来源,我可以找到4种不同的方式在PDO连接上设置UTF-8,但找不到哪一种更好的选择.

PDO连接代码(以及一些内容):

$localhost = $_SERVER['SERVER_NAME'] == 'localhost';
error_reporting(-1); ini_set('display_errors', $localhost); // Old : error_reporting($localhost ? -1 : 0); see answer above
date_default_timezone_set('Europe/Paris');

$pdo_db = 'mysql:host=localhost;dbname=local_db;charset=utf8'; // METHOD #1
$pdo_login = 'root';
$pdo_pass = 'localpass';

try {
    $db = new PDO($pdo_db, $pdo_login, $pdo_pass, array(
        PDO::ATTR_ERRMODE => $localhost ? PDO::ERRMODE_EXCEPTION : PDO::ERRMODE_SILENT,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', // METHOD #2
    ));
    $db -> exec('SET NAMES utf8'); // METHOD #3
    $db -> exec('SET CHARACTER SET utf8'); // METHOD #4
    $db -> exec('SET time_zone …
Run Code Online (Sandbox Code Playgroud)

php pdo database-connection

8
推荐指数
1
解决办法
9553
查看次数