Archive

Posts Tagged ‘MySQL’

CodeIgniter 設定 MySQL 編碼

十二月 22nd, 2007

※ CodeIgniter 1.6 已釋出,不需再做這篇的修正了哦!

先前有提到CodeIgniter 這個 PHP Framework,也用它做了幾個 case,當然開發速度不能說快上多少,但確實讓程式碼變得整齊優雅許多。

使用 CI 目前遇到第一個問題是存取 MySQL 資料的問題,在 MySQL 4.1 以後採用了多層式編碼設定,簡單說就是不管是資料庫、資料表、欄位或是 Client 連線階段,都可以分別設定編碼,所以即使 server 都改成了 utf8,PHP 到 MySQL Server 的這個 connection 卻還是預設的(latin1),許多亂碼就是這樣造成的,應該已經有不少人知道解決方法,就是先送出一個改變編碼的查詢:SET NAMES 'charset'。
然而目前 CodeIgniter 並沒有這樣的設計,所以只好自行改 code 囉!

Step1:修改 system/application/config/database.php
增加一項:$db['default']['charset'] = "utf8";

Step2:修改 system/database/DB_driver.php
在 32 行之後的宣告增加:var $charset = '';
接著 96 行的陣列增加:'charset' => '',

Step3:修改 system/database/drivers/mysql/mysql_driver.php
74 行 return 前加入:


if (!empty($this->charset))
{
    @mysql_query("SET NAMES $this->charset");
}

這樣就 ok 了,如果使用 mysqli 請如法炮製。另外如果主機環境符合,可使用 PHP 內建函式來設定:


// PHP >= 5.2.3,MySQL >= 5.0.7 for mysql
@mysql_set_charset($this->charset, $this->conn_id);
// PHP >= 5.0.5,MySQL >= 5.0.6 for mysqli
@mysqli_set_charset($this->conn_id, $this->charset);

PHP, 程式筆記 , , ,

可攜式 APM 網頁伺服器

六月 3rd, 2007

MySQL 遠端連線設定

五月 13th, 2006

有些主機空間不開放使用 MySQL,這時就可以自己架一台 MySQL Server 並設定允許外部連線,讓沒有 MySQL 的主機也能使用。
方法很簡單,只要兩個關鍵步驟即可:

1) 開啟 TCP 3306 (預設 MySQL Port)。
2) 新增一個 User,主機(Host) 為允許連線的網域或 IP,如果不限制可以用「%」表任何主機。

如果不行請檢查 mysql 設定檔 (my.ini 或 my.cnf),註解下面文字
skip-networking
bind-address=127.0.0.1

Server, 系統筆記 ,

MySQL 4.1 + phpMyAdmin 問題

十一月 28th, 2004

下載了新版 MySQL 4.1.x 及 phpMyAdmin 安裝在 XP 系統上測試,結果發現 phpMyAdmin 無法正常登入,出現如下錯誤訊息:

#1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client

於是在 MySQL 官網找到解決方法,照做之後就OK囉!有此問題的可以參考看看。

(1) 在開始 → 執行輸入"CMD"進入命令列模式。
(2) 輸入 "MySQL 路徑\bin\mysql -h localhost -u root -p"。(要重設root密碼)
(3) 接著會出現 Enter Password:輸入安裝MySQL打的密碼。
(4) mysql>提示符號鍵入:SET PASSWORD FOR
(5) 再輸入:'root'@'localhost' = OLD_PASSWORD('新密碼');
(6) 完成,現在就可以登入 phpMyAdmin 囉!

補充:
1.問題原因為 MySQL 4.1 以上使用新的密碼驗證機制,而 PHP4 尚未支援。
2.只要是 MySQL 4.1.x 及以上的版本無法連接都可照此方法試試。
3.升級成 PHP5 則無此問題。

Windows, 系統筆記, 軟體筆記