Ruby 的 CGI 連結 MYSQL


花了差不多 3 小時,終於完成了伺服器上連結 MYSQL 的動作…除了安裝 MYSQL 連接,還要改動 MYSQL 4 和 5 升級之間的版本差異問題..本來正想放棄,重開伺服器後,再測試多一次,完成了,奇積再次發生了…天丫…感謝你..

好吧,來記錄一下我的過程..方便日後參考..

  1. 先登入 SSH , 之後切換到 root 帳號,再到 cd /
  2. 輸入 gem install mysql – –with-mysql-conf=/usr/local/mysql50/bin/mysql_config 這是我的安裝路徑 (當然你要先裝好 Ruby)
  3. 之後最重要的一部是, 如果你的 MYSQL 是由 4 升級到 5 的話要修改一樣東西,方法有幾個

方法 1 :

  • 打開 phpmyadmin , 用最高級帳號登入,之後 mysql.user 這個表,將所有用戶都編輯,輸入原密碼,之後選擇那個 OLD_PASSWORD 之後存檔

方法 2:

  • 進入 SSH ,再進入 mysql > 這個指令介面
  • 之後輸入 UPDATE mysql.user SET Password = OLD_PASSWORD(‘原密碼’) WHERE Host = ‘localhost’ AND User = ‘帳號’;
  • 大大力的拍下你的 Enter .. 之後一個一個慢慢的來..
  1. 重新啟動你的 MYSQL 伺服器,那這樣應該就可以正常連結 MYSQL

補充一下另一個參考用的指令
gem install mysql – –with-mysql-dir=/usr/local/mysql50 –with-mysql-include=/usr/include/mysql –with-mysql-lib=/usr/lib/mysql

提供一個測試的程式代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/local/bin/ruby

require 'rubygems'
require 'mysql'

puts "Content-type: text/html; charset=utf-8\r\n\r\n"
puts "This is a output test<hr />"

begin

dbh = Mysql.connect('localhost', '帳號', '密碼', '資料庫名稱', 3306, "/tmp/mysql.sock")
dbh.query("SET NAMES 'UTF8'");

query = dbh.query("SELECT * FROM skts_username")
while row = query.fetch_hash do
printf "%s, %s<br />\n", row["username"], row["password"]
end

rescue Mysql::Error => e

puts "Error code: #{e.errno}"
puts "Error message: #{e.error}"
puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")

ensure
dbh.close if dbh
end

這個是資料庫用的 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `skts_username` (
`uid` mediumint(8) unsigned NOT NULL auto_increment,
`username` char(15) collate utf8_unicode_ci NOT NULL,
`password` char(32) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;

--
-- 列出以下資料庫的數據: `skts_username`
--

INSERT INTO `skts_username` (`uid`, `username`, `password`) VALUES
(1, '簡單', '098f6bcd4621d373cade4e832627b4f6'),
(2, '無他', '81dc9bdb52d04dc20036dbd8313ed055');