我对本地数据库有一个选择查询,由于某种原因出现以下错误:
ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FROM site WHERE name = OCC AND date_start = 2018-07-30 08:00:00 AND date_end = '' at line 1
这是我的查询
connection.query("SELECT *, FROM shop WHERE name = " + shop_name + " AND date_start = " + myDate + " AND date_end = " + myDate2, function (err, result)
{
if (err)
{
console.log("Error Is:" + err);
}
else
{
console.log('DATA EXISTING IS =' + JSON.stringify(result));
}
});
我错过了什么吗?
答案 0 :(得分:0)
通常的口头禅:使用参数化查询。它们将防止SQL注入,并使您的服务更安全。此外,在使用字符串连接构建查询时,它们将解决常见的陷阱。
让我们看看您的查询
"SELECT *, FROM shop WHERE name = " + shop_name + " AND date_start = " + myDate + " AND date_end = " + myDate2
拼写出类似
SELECT *, FROM shop WHERE name = myshop AND date_start = 2018-07-30 AND date_end = 2018-08-10
至少有3个错误
,
后面的SELECT *
也是错误告诉您的内容。我想您有一个列列表,并将其替换为*
商店name
列肯定是一些char列。因此,您必须将值用引号引起来
此外,日期必须与引号一起使用,因此SQL引擎会将其解析为日期并进行比较。对于某些SQL引擎,还有一个特殊的日期注释。看看文档。
此查询应该有效
"SELECT * FROM shop WHERE name = '" + shop_name + "' AND date_start = '" + myDate + "' AND date_end = '" + myDate2 +"'"
取决于myDate
和myDate2
是什么。
如果使用参数化查询,至少不会出现问题2和3。请查阅所用库的文档。