php.net, स्टैक ओवरफ्लो और ट्रस्ट के अन्य स्रोतों के अनुसार, मुझे पीडीओ कनेक्शन पर यूटीएफ -8 सेट करने के 4 अलग-अलग तरीके मिल सकते हैं, लेकिन यह नहीं मिल सकता कि कौन सी चुनना बेहतर है।पीडीओ कनेक्शन: एसईटी नाम/चरित्र सेट के साथ यूटीएफ -8 घोषणा?
एक पीडीओ कनेक्शन कोड (और कुछ inits):
$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 = \''.date_default_timezone_get().'\'');
} catch (PDOException $error) {
die($error -> getMessage());
}
तो, मैं क्या समझ में आया, कि विधि 1 केवल पीएचपी के साथ काम 5.3+ (लेकिन ऐसा लगता है कि यह थोड़ा गाड़ी है) है, और विधि 2 केवल MySQL के लिए है। विधि 3 और 4 के बीच अंतर MySQL thing है, लेकिन मुझे अभी भी पता नहीं है कि कौन बेहतर है। और पीडीओ विशेषताओं में सेट नामों को कॉल करने का कोई तरीका है, लेकिन केवल MySQL के लिए नहीं?
धन्यवाद!
तो <5.3, सेट नाम कॉललेट और सीई, लेकिन 5.3.0 और इससे पहले, विधि # 1 केवल वास्तव में पर्याप्त है? और, क्या मैं दोनों को दे सकता हूं? ओह और मुझे आपका मुद्दा नहीं मिलता है: इसे बिना शर्त -1 क्यों होना चाहिए? मैं नहीं चाहता कि त्रुटियों को प्रदर्शित करने के लिए जब मैं स्थानीयहोस्ट हूं ... (इस विषय-वस्तु सलाह के लिए धन्यवाद btw!) – Joan
यह बिल्कुल सही लगता है! तो दूसरी पंक्ति 'error_reporting (-1) बन जाती है; ini_set ('display_errors', $ localhost); '। – Joan