我已經在我的連接庫代碼中引入了$PDO->query('SET NAMES utf8;');
以獲得一些Unicode合規性。這可以在一些主機上運行,我可以使用.execute()
通過INSERT執行PDO語句。某些主機不喜歡SET NAMES utf8 - 「當其他未緩衝的查詢處於活動狀態時,無法執行查詢。」
然而,在一些託管計劃,我遇到這個錯誤:
General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
因此,SET名之前,我介紹$PDO->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);
,但我仍然得到錯誤。然後我將該值設置爲FALSE,但仍然出現錯誤。
當然,如果我刪除"SET NAMES utf8"
聲明,問題就會消失。再次 - 這個問題只發生在一些網絡主機上。
將MySQL切換到適用於大多數Linux主機計劃的Unicode的正確方法是什麼?
它是使用這個mysql連接運行的第一個查詢(作爲PDO對象)嗎?一旦連接打開,我將設置名稱。 – rahmanisback 2012-04-16 11:14:09
是的,我的代碼只有在連接第一次打開時纔會執行,之後再也不會再執行。 – Volomike 2012-04-16 13:42:08