我有类似以下的红宝石代码:
client = Mysql2::Client.new(:host => "localhost", :username => "root", :password => "root")
client.query("CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(25),
CurrentDate DATE,
SourceCurrency VARCHAR(25),
TargetCurrency VARCHAR(25),
SourceAmount FLOAT(23,7),
TargetAmount FLOAT(23,7)
)"
)
target_amount = source_amount * 0.7477
client.select_db "project6"
client.query("INSERT INTO Customers (Name, CurrentDate, SourceCurrency, TargetCurrency, SourceAmount, TargetAmount)VALUES(#{client.escape(customer_name)}, #{(Date.today)}, 'EUR', 'GBP', #{(source_amount)}, #{(target_amount)})")
client.close
此处source_amount
和target_amount
都是 float 。在我的 project6 表中,SourceAmount&的数据类型TargetAmount是float(23,7)。
但每当我运行此代码时,都会发生错误:
Uncaught exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '23:39:43 +0600, 'EUR', 'GBP', 120.0, 89.724)' at line 1
如果我设置customer_name
= " emu" 则其他错误
Unknown column 'emu' in 'field list' (Mysql2::Error)
出了什么问题?
答案 0 :(得分:1)
有几个问题。
(1)您提供Time.now
的输出(默认为时间加上时区偏移量,空格分隔符,例如,23:39:43 +0600
)到SQL DATE属性,它不匹配。你需要提供一个日期。
(2)需要引用Name
属性的值。否则,SQL认为您指的是属性名称。因此,如果您有customer_name = 'emu'
,那么您当前的查询只会将emu
作为值,而不是'emu'
。你可以通过几种不同的方式解决这个问题例如:
client.query("INSERT INTO Customers (Name, CurrentDate, SourceCurrency, TargetCurrency, SourceAmount, TargetAmount) VALUES ('#{client.escape(customer_name)}', #{(Date.today)}, 'EUR', 'GBP', #{(source_amount)}, #{(target_amount)})")
或者...
client.query("INSERT INTO Customers (Name, CurrentDate, SourceCurrency, TargetCurrency, SourceAmount, TargetAmount) VALUES ('" + client.escape(customer_name) + "', #{(Date.today)}, 'EUR', 'GBP', #{(source_amount)}, #{(target_amount)})")