완전성을 위해 실제로 PDO에서 MySQL에 연결할 때 인코딩을 설정하는 세 가지 방법이 있으며 사용 가능한 방법은 PHP 버전에 따라 다릅니다. 선호 순서는 다음과 같습니다.
charset
DSN 문자열의 매개 변수
- 실행
SET NAMES utf8
으로 PDO::MYSQL_ATTR_INIT_COMMAND
연결 옵션
SET NAMES utf8
수동으로 실행
이 샘플 코드는 다음 세 가지를 모두 구현합니다.
<?php
define('DB_HOST', 'localhost');
define('DB_SCHEMA', 'test');
define('DB_USER', 'test');
define('DB_PASSWORD', 'test');
define('DB_ENCODING', 'utf8');
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA;
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
if( version_compare(PHP_VERSION, '5.3.6', '<') ){
if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING;
}
}else{
$dsn .= ';charset=' . DB_ENCODING;
}
$conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options);
if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$sql = 'SET NAMES ' . DB_ENCODING;
$conn->exec($sql);
}
세 가지 모두를 수행하는 것은 아마도 과도하게 사용됩니다 (배포하거나 재사용 할 수업을 작성하지 않는 한).