【问题标题】:Using prepared statement with MySQL2 gem?在 MySQL2 gem 中使用准备好的语句?
【发布时间】:2014-03-10 06:02:03
【问题描述】:

如何在 MySQL 中为 insertselect 查询创建准备好的语句?我正在使用 MySQL2 gem,我的连接对象如下所示:

 con = Mysql2::Client.new(:host => "#{ENV['DB_HOST']}", :port => '3306', :username => "#{ENV['DB_UNAME']}", :password => "#{ENV['DB_PWD']}", :database => 'dbname')

【问题讨论】:

  • 请只问一个问题。如何使用 MySQL 生成准备好的语句,为什么应该使用准备好的语句以及它们的替代方案是三个问题,并且不能在一个问题中正确解决。我建议将您的问题减少到第一个问题,然后花一些时间研究另外两个问题,因为由于需要在答案中提供大量信息,它们会偏离主题。
  • 归结为一个问题。如何在 ruby​​ 中使用 MySQL2 gem 生成准备好的语句?

标签: ruby prepared-statement mysql2


【解决方案1】:

不幸的是,mysql2 gem 还没有准备好的语句支持。贡献者计划在不久的将来添加这样的功能,正如我们在此 Pull Request 讨论中看到的那样:

https://github.com/brianmario/mysql2/pull/289

如果您必须在您的应用程序中准备好语句,我建议您阅读 Sequel,它对准备好的语句和绑定变量有很好的支持:

https://github.com/jeremyevans/sequel

http://sequel.jeremyevans.net/rdoc/files/doc/prepared_statements_rdoc.html

更新

正如@lulalala 所述,从版本 0.4.0 开始,MySQL2 gem 支持准备好的语句:

statement = @client.prepare("SELECT * FROM users WHERE login_count = ?")
result1 = statement.execute(1) # Binds the value 1 to the placeholder 
result2 = statement.execute(2) # Binds the value 2 to the placeholder

statement = @client.prepare("SELECT * FROM users WHERE last_login >= ? AND location LIKE ?")
result = statement.execute(1, "CA") # Binds 1 and 'CA' to the placeholders, respectively

希望对你有帮助。

【讨论】:

  • +1 我绝对支持查看续集的建议。这是一个很棒的 ORM,是我工作的核心。
  • 我们完全同意@theTinMan !我真的很喜欢续集。它很健壮,并且有一个非常好的界面来与 =P 交互
  • @Oatmeal 没关系,但请记住,这不是您问题的答案。使用 ActiveRecord 与使用 mysql2 gem 不同。这是 Rails 默认的 ORM。这与我们的目标相同,但使用了不同的 ORM。
  • 是的,我同意你的看法.....我想知道使用准备好的语句的重要性。我知道他们提高了效率。
  • 我所说的超出了预准备语句的重要性 =P 我是说我们回答了您关于 mysql2 gem 提供预准备语句支持的问题。如果您决定采用另一种方法,使用 ActiveRecord、Sequel 或任何其他 ORM,这完全取决于您。但是您最初的问题 如何在 ruby​​ 中使用 MySQL2 gem 生成准备好的语句? 得到了回答;)
【解决方案2】:

您也可以使用 mysql2-cs-bind gem,它是 mysql2 的一个瘦包装器,它添加了准备好的语句功能: https://github.com/tagomoris/mysql2-cs-bind

它提供了接受语句参数的xquery 方法:

require 'mysql2-cs-bind'
client = Mysql2::Client.new(...)
client.xquery('SELECT x,y,z FROM tbl WHERE x=? AND y=?', val1, val2) #=> Mysql2::Result

【讨论】:

    猜你喜欢
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 2018-08-14
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多