如何在MySQL中为insert
和select
查询创建预准备语句?我现在用的是MySQL2宝石,和我的连接对象是这样的:使用MySQL2 gem准备的语句?
con = Mysql2::Client.new(:host => "#{ENV['DB_HOST']}", :port => '3306', :username => "#{ENV['DB_UNAME']}", :password => "#{ENV['DB_PWD']}", :database => 'dbname')
如何在MySQL中为insert
和select
查询创建预准备语句?我现在用的是MySQL2宝石,和我的连接对象是这样的:使用MySQL2 gem准备的语句?
con = Mysql2::Client.new(:host => "#{ENV['DB_HOST']}", :port => '3306', :username => "#{ENV['DB_UNAME']}", :password => "#{ENV['DB_PWD']}", :database => 'dbname')
遗憾的是,宝石mysql2不准备发言表示支持呢。贡献者计划在不久的将来增加这样的功能,我们可以通过这个拉入请求的讨论,请参阅:
https://github.com/brianmario/mysql2/pull/289
如果您的应用程序必须准备发言,我会建议你读到续集,这对准备好的语句和绑定变量的一个非常好的支持:
https://github.com/jeremyevans/sequel
http://sequel.jeremyevans.net/rdoc/files/doc/prepared_statements_rdoc.html
个UPDATE
正如在版本@lulalala开始提到0.4.0MySQL2 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。 –
你也可以使用mysql2-CS-绑定宝石,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
请只问一个问题。您如何使用MySQL生成准备好的语句,为什么您应该使用准备好的语句以及它们的替代选择是三个问题,并且无法在单个问题中正确解决。我建议把你的问题减少到第一个问题,然后花一些时间研究其他两个问题,因为他们会因为需要在答案中提供的信息量而变得无关紧要。 –
它下降到一个问题..如何生成与MySQL2宝石红宝石准备好的声明? – Oatmeal