【问题标题】:Using a variable in Ruby Mysql query在 Ruby Mysql 查询中使用变量
【发布时间】:2011-04-01 15:35:51
【问题描述】:

我在变量username 中存储了一个名称,我想在尝试时提取用户行信息

result = dbh.query("SELECT * FROM maintab WHERE user = '#{username}'")

我没有得到任何结果。但是,如果我手动输入用户名,它确实会返回结果。如何格式化我的查询以便我可以使用变量?

【问题讨论】:

  • 感谢您的警告,一旦我真正让一切工作正常,我一定会为我的所有查询注入攻击证明。
  • 你确定 username 变量不是 nil 或 emty 吗?
  • 我建议使用更高级别的东西,例如 github.com/jeremyevans/sequel DB[:maintab].filter(:user => username)DB['select * from maintab where user = ?', username]
  • 看起来不错,谢谢指出

标签: mysql ruby


【解决方案1】:

尝试这样调试:

username = "Peter" # any of your real name
result = dbh.query("SELECT * FROM maintab WHERE user = '#{username}'")

它应该工作。看起来您的 usernamenilblank

【讨论】:

  • Crazy:我把用户名放在屏幕上,然后输出变量只是为了确保它在那里并且确实存在。但是,当我像您在上面那样设置用户名时,它起作用了。原来变量上有一些额外的东西, .strip 立即清除它。谢谢。
  • @Arbiter:在担心数据清理(即 SQL 注入)之前,您说的是让它工作...
  • 我愚蠢地假设 gem 在查询中使用变量时遇到了麻烦。那会教我...
【解决方案2】:

打开 IRB 并尝试打印你所拥有的。

单引号与转义双引号的 #{} 表现如何?

这应该可以回答你的问题。

【讨论】:

  • 我不确定是否可以尝试 IRB。我在远程服务器上运行脚本。我让它输出它找到的行数,看看它是否找到任何东西。我相信我正确地尝试了转义的双引号并遇到了相同的结果。很可能是我做错了
猜你喜欢
  • 2013-07-26
  • 2013-05-15
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多