mysql解析错误显示查询何时具有3个条件

时间:2018-07-30 00:40:34

标签: javascript mysql

我对本地数据库有一个选择查询,由于某种原因出现以下错误:

 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));
        }
    });

我错过了什么吗?

1 个答案:

答案 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个错误

  1. ,后面的SELECT *也是错误告诉您的内容。我想您有一个列列表,并将其替换为*

  2. 商店name列肯定是一些char列。因此,您必须将值用引号引起来

  3. 此外,日期必须与引号一起使用,因此SQL引擎会将其解析为日期并进行比较。对于某些SQL引擎,还有一个特殊的日期注释。看看文档。

此查询应该有效

 "SELECT * FROM shop WHERE name = '" + shop_name + "' AND date_start = '" + myDate + "' AND date_end = '" + myDate2 +"'"

取决于myDatemyDate2是什么。

如果使用参数化查询,至少不会出现问题2和3。请查阅所用库的文档。