यह:
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
पूरी तरह से व्यर्थ है। देखें https://php.net/manual/en/ref.pdo- mysql.php
. MYSQL_ATTR_INIT_COMMAND कनेक्शन स्थापित होने के ठीक बाद निष्पादित किया जाता है, बाद में नहीं। यदि आप इसे पहले से पूरी तरह से बनाए गए पीडीओ ऑब्जेक्ट पर सेट करते हैं, तो बहुत देर हो चुकी है और यह कभी भी निष्पादित नहीं होता है। आपको इसे कंस्ट्रक्टर को पास करना होगा:
new PDO(..., ..., ..., array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))
वैकल्पिक रूप से, यदि आपका PHP संस्करण इसका समर्थन करता है, तो charset=utf8 . जोड़ें डीएसएन को।