使用Ruby的mysql2 gem执行INSERT语句时遇数组转哈希类型错误
解决mysql2 gem INSERT时的TypeError问题
问题出在mysql2 gem的query方法参数设计上:它的第二个参数是配置选项哈希(Hash),不是绑定参数数组,这和你之前用的SQLite驱动语法不兼容,所以直接传数组会触发no implicit conversion of Array into Hash错误。
两种可行的解决方法:
推荐:使用prepare + execute(更安全,防SQL注入)
先预编译SQL语句,再传入参数执行:# 预编译语句 stmt = client.prepare("INSERT INTO test VALUES (?, ?)") # 传入参数执行 stmt.execute("abc", 3) # 执行完关闭statement stmt.close或者用块语法自动关闭statement,更简洁:
client.prepare("INSERT INTO test VALUES (?, ?)") do |stmt| stmt.execute("abc", 3) end直接用query方法(需把参数放到选项哈希里)
如果想继续用query,要把参数数组放到:params键对应的哈希值中:client.query("INSERT INTO test VALUES (?, ?)", params: ["abc", 3])
补充说明
SQLite的Ruby驱动(比如sqlite3 gem)的query方法支持直接传参数数组作为第二个参数,但mysql2的API设计不同,所以两者语法不能通用。
内容的提问来源于stack exchange,提问作者Zep
相关产品推荐
相关产品推荐

