adodb 连接mysql_PHP中使用ADODB连接MySQL中文乱码
最近寫程序,朋友推薦使用ADODB進行數據庫連接,速度快,支持數據庫種類很多,功能也很強大,使用一下覺得很不錯。我程序使用Extjs,數據庫PostgresQL,字符集使用的是utf-8,ADODB沒有做任何改動就使用上了,很不錯。
有另外一個項目,也使用Extjs,數據庫使用MySQL5,我把數據庫連接也改成了ADODB,但是問題出現了,中文顯示的都是???,檢查數據庫的字符集,Apache的字符集,PHP的字符集都是utf-8的,不知道問題出在了什么地方,把ADODB的源碼也讀了一遍,也沒有找到。
最后在網上看到了很多朋友都遇到了這樣的問題,也提了不少的解決方法,試過后都不行,最后看到了關于Mysql的字符設置的資料,于是修改了ADODB中mydql驅動的代碼,解決了問題,先把具體的方法同大家共享一下:
找到ADODB中的drivers目錄下的adodb-mysql.inc.php文件,修改其中的 _connect和 _pconnect兩個函數,各增加以下代碼:+ @mysql_query("SET NAMES 'utf8'", $this->_connectionID);即可,位置在SelectDB一行之前。
function _connect($argHostname, $argUsername, $argPassword, $argDatabasename)
{
if (!empty($this->port)) $argHostname .= ":".$this->port;
if (ADODB_PHPVER >= 0x4300)
$this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
$this->forceNewConnect,$this->clientFlags);
else if (ADODB_PHPVER >= 0x4200)
$this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword,
$this->forceNewConnect);
else
$this->_connectionID = mysql_connect($argHostname,$argUsername,$argPassword);
if ($this->_connectionID === false) return false;
+ @mysql_query("SET NAMES 'utf8'", $this->_connectionID);
if ($argDatabasename) return $this->SelectDB($argDatabasename);
return true;
}
function _pconnect($argHostname, $argUsername, $argPassword, $argDatabasename)
{
if (!empty($this->port)) $argHostname .= ":".$this->port;
if (ADODB_PHPVER >= 0x4300)
$this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword,$this->clientFlags);
else
$this->_connectionID = mysql_pconnect($argHostname,$argUsername,$argPassword);
if ($this->_connectionID === false) return false;
if ($this->autoRollback) $this->RollbackTrans();
+ @mysql_query("SET NAMES 'utf8'", $this->_connectionID);
if ($argDatabasename) return $this->SelectDB($argDatabasename);
return true;
}
總結
以上是生活随笔為你收集整理的adodb 连接mysql_PHP中使用ADODB连接MySQL中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 又拿下一块屏幕,中景园2.08寸OLED
- 下一篇: 人工神经网络可以做什么,人工神经网络有什