पूर्णता के लिए, वास्तव में 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);
}
तीनों को करना शायद ओवरकिल है (जब तक कि आप एक वर्ग नहीं लिख रहे हैं जिसे आप वितरित या पुन: उपयोग करने की योजना बनाते हैं)।