Ruby/MySQL の利用例

require 'rubygems'
require 'mysql'

hostname = 'localhost'
username = 'yourname'
passowrd = 'password'
database = 'mysql'

begin
  # データベースに接続
  # 接続が確立されれば、MySQL オブジェクトが返される
  db = Mysql::connect(hostname, username, passowrd, database)

  # 実行する
  # Mysql::Result オブジェクトが返される
  sql = 'SELECT `HOST`, `USER` FROM `user`'
  result_sets = db.query sql

  puts '[Statement Results]'

  # 検索結果数を返す
  puts "Search Results: #{result_sets.num_rows} found."
  # each イテレーターで結果を取得する
  result_sets.each do |row|
    puts row.join(', ')
  end

  # プリペアード・ステートメントを利用する

  # プリペアード・ステートメントを生成する
  # Mysql::Stmt オブジェクトが返される
  sql = 'SELECT `HOST`, `USER` FROM `user` WHERE `HOST` = ?'
  prepared_sql = db.prepare(sql)

  # プレース・ホルダーの値を
  # 設定して実行する
  prepared_sql.execute('localhost')

  puts '[Prepared Statement Results]'

  # 行数はnum_rows()メソッドで分かる
  puts "#{prepared_sql.num_rows} rows found."

  # each イテレーターで結果を取得する
  prepared_sql.each do |row|
    puts row.join(', ')
  end
rescue Mysql::Error => e # 例外が発生した場合の処理内容
  puts "[Error:#{e.errno}] #{e.error}"

ensure # 処理が成功しても、例外が発生しても最後に処理する内容
  result_sets.free if result_sets
  prepared_sql.free_result if prepared_sql
  prepared_sql.close if prepared_sql
  db.close if db
end

実行結果例

[Statement Results]
Search Results: 3 found.
127.0.0.1, root
localhost, root
localhost, yourname

[Prepared Statement Results]
2 rows found.
localhost, root
localhost, yourname

Mysql::Result クラスの each_hash を利用する場合

  # each_hash イテレーターで結果を取得する
  result_sets.each_hash do |rows|
    puts "#{rows['HOST']} : #{rows['USER']}"
  end
実行結果例
[Statement Results]
Search Results: 3 found.
127.0.0.1, root
localhost, root
localhost, yourname