Latest web development tutorials

Ruby connection Mysql - MySql2

The previous section we introduced the Ruby DBI uses. This chapter of our technical Ruby connection Mysql more efficient drive mysql2, is also the recommended way to connect MySql.

Installation mysql2 drive:

gem install mysql2

You need to use the -with-mysql-config configuration mysql_config path, such as: -with-mysql-config = / some / random / path / bin / mysql_config.

connection

Database connection syntax is as follows:

# 更多参数可以查看 http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/MysqlAdapter.html
client = Mysql2::Client.new(:host => "localhost", :username => "root")

Inquire

results = client.query("SELECT * FROM users WHERE group='githubbers'")

Special character escape

escaped = client.escape("gi'thu\"bbe\0r's")
results = client.query("SELECT * FROM users WHERE group='#{escaped}'")

The results set the number of returns:

results.count

Iterative result set:

results.each do |row|
  # row 是哈希
  # 键值是数据库字段
  # 值都是对应 MySQL中数据
  puts row["id"] # row["id"].class == Fixnum
  if row["dne"]  # 不存在则是 nil
    puts row["dne"]
  end
end

Examples

#!/usr/bin/ruby -w
require 'mysql2'

client = Mysql2::Client.new(
	:host     => '127.0.0.1', # 主机
	:username => 'root',      # 用户名
	:password => '123456',    # 密码
	:database => 'test',      # 数据库
	:encoding => 'utf8'       # 编码
	)
results = client.query("SELECT VERSION()")
results.each do |row|
  puts row
end

Run the above example output is:

{"VERSION()"=>"5.6.21"}

Connection Options

Mysql2::Client.new(
  :host,
  :username,
  :password,
  :port,
  :database,
  :socket = '/path/to/mysql.sock',
  :flags = REMEMBER_OPTIONS | LONG_PASSWORD | LONG_FLAG | TRANSACTIONS | PROTOCOL_41 | SECURE_CONNECTION | MULTI_STATEMENTS,
  :encoding = 'utf8',
  :read_timeout = seconds,
  :write_timeout = seconds,
  :connect_timeout = seconds,
  :reconnect = true/false,
  :local_infile = true/false,
  :secure_auth = true/false,
  :default_file = '/path/to/my.cfg',
  :default_group = 'my.cfg section',
  :init_command => sql
  )

For more information, please refer to: http://www.rubydoc.info/gems/mysql2/0.2.3/frames .