【发布时间】:2017-07-29 11:52:50
【问题描述】:
我正在尝试编写用于在表上搜索的查询,但我收到了一般的 1064 MySQL 语法错误。我没有发现我的查询有什么问题……事实上,我还有另一个查询,它工作正常。
查询在 Go 中使用 SQL 驱动程序,所有 ? 将在查询运行之前转换为值。
这是我的错误:
错误 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'SELECT tax.* 附近使用的正确语法 从税 加入用户税 ON user_tax.tax_id = tax.id WHERE u' 在第 3 行
例如,这是有效的查询:
SELECT tax.*
FROM tax
JOIN user_tax
ON user_tax.tax_id = tax.id
WHERE user_tax.user_id = ?
AND tax.deleted_at IS NULL
AND user_tax.deleted_at IS NULL
上面的查询将查找给定用户的所有税务记录。
现在我正在尝试进行完全相同的查询,但现在它是一个“搜索”查询。它接收一个搜索字符串并在税表的name 和rate 列中查找它。就是这样:
SET @searchString = '%?%';
SELECT tax.*
FROM tax
JOIN user_tax
ON user_tax.tax_id = tax.id
WHERE user_tax.user_id = ?
AND tax.deleted_at IS NULL
AND user_tax.deleted_at IS NULL
AND tax.name LIKE @searchString
OR tax.rate LIKE @searchString
这是代码中的查询:
var taxes []Tax
err := r.db.Select(&taxes, `
SET @query = '%?%';
SELECT tax.*
FROM tax
JOIN user_tax
ON user_tax.tax_id = tax.id
WHERE user_tax.user_id = ?
AND tax.deleted_at IS NULL
AND user_tax.deleted_at IS NULL
AND tax.name LIKE @query
OR tax.rate LIKE @query
`, q, userId)
【问题讨论】:
-
你的接口只允许传入一个查询。我建议你学习为你正在使用的接口使用合适的参数。
-
哦,很好,我的意思是用
?代替%s。刚刚在我的代码和问题中更新。仍然出现同样的错误。 -
还将
@query更改为@searchString,因为这可能会造成混淆,我并没有尝试将查询放入查询中。 -
在哪里 user_tax.user_id = ?这是什么?表示?
-
为什么你使用
?你是在使用php pdo还是其他东西来查询db?