Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类从句问题_Javascript_Mysql_Sql_Node.js - Fatal编程技术网

Javascript 类从句问题

Javascript 类从句问题,javascript,mysql,sql,node.js,Javascript,Mysql,Sql,Node.js,我正在开发一个小型移动网络应用程序。我有一个查询,它有一个LIKE子句。例如: 从帖子中选择(标题如“%car%”)或(内容如“%car%”); 我遇到的问题是javascript中的变量在其值周围有单引号。因此,我得到以下信息: 从(标题类似“%”car“%”或(内容类似“%”car“%”)的帖子中进行选择; 我以这种方式构建的实际字符串: "SELECT from posts WHERE (title LIKE '%" + client.escape(input) + "%') or (

我正在开发一个小型移动网络应用程序。我有一个查询,它有一个
LIKE
子句。例如:

从帖子中选择(标题如“%car%”)或(内容如“%car%”);
我遇到的问题是javascript中的变量在其值周围有单引号。因此,我得到以下信息:

从(标题类似“%”car“%”或(内容类似“%”car“%”)的帖子中进行选择;
我以这种方式构建的实际字符串:

"SELECT from posts WHERE (title LIKE '%" + client.escape(input) + "%') or (content LIKE '%" + client.escape(input) + "%');"

转义函数会自动添加封闭的
'
s,因此将
%
s移动到变量内部并转义,然后从查询中删除
'
s:

input = client.escape('%' + input + '%'); //=== "'%escaped_input%'"
client.query("SELECT * FROM posts WHERE (title LIKE " + input + ") or (content LIKE " + input + ")", function(err, results) {
     // ...
});
或者,您还应该能够使用模拟的准备语句语法:

input = '%' + input + '%';
client.query("SELECT * FROM posts WHERE (title LIKE ?) or (content LIKE ?)", [input, input], function(err, results) {
     // ...
});
这将执行类似于
sprintf
的操作,将
占位符替换为第二个参数数组中正确转义的项(内部使用与上面相同的
转义
方法),按照传递的顺序-占位符的顺序对应于数组项的顺序



旁注:我假设您将查询过于简化,从
SELECT
语句中删除了所有字段,请记住至少选择一个字段或所有字段(
*
),否则这是无效的SQL语法。

包含的
'
由转义函数自动添加,因此,将
%
s移到变量内部并转义它,然后从查询中删除
'
s:

input = client.escape('%' + input + '%'); //=== "'%escaped_input%'"
client.query("SELECT * FROM posts WHERE (title LIKE " + input + ") or (content LIKE " + input + ")", function(err, results) {
     // ...
});
或者,您还应该能够使用模拟的准备语句语法:

input = '%' + input + '%';
client.query("SELECT * FROM posts WHERE (title LIKE ?) or (content LIKE ?)", [input, input], function(err, results) {
     // ...
});
这将执行类似于
sprintf
的操作,将
占位符替换为第二个参数数组中正确转义的项(内部使用与上面相同的
转义
方法),按照传递的顺序-占位符的顺序对应于数组项的顺序



旁注:我假设您将查询过于简化,从
SELECT
语句中删除了所有字段,请记住至少选择一个字段或所有字段(
*
),否则这是无效的SQL语法。

是否从节点运行此查询?您使用的是哪个mysql模块?在调用escape之前,请在输入中添加
%
符号。
SELECT from
看起来也不是有效的mysql语法。您是对的,只是在本地进行了尝试,并且
connection.scape()
没有转义单引号,这很奇怪。我建议您看看这些引号来自何处。您对javascript的概括是不正确的。您是从节点运行此查询吗?您使用的是哪个mysql模块?在调用escape之前,请在输入中添加
%
符号。
SELECT from
看起来也不是有效的mysql语法。您是对的,只是在本地进行了尝试,并且
connection.scape()
没有转义单引号,这很奇怪。我建议您看看这些引号来自何处。你简单地把javascript放在那里的泛化是不正确的。是的,我通常会使用模拟的prepared语句,但在这种情况下,我使用LIKE子句比较多个输入。非常感谢您的帮助。是的,我通常会使用模拟的prepared语句,但在本例中,我使用LIKE子句比较多个输入。非常感谢你的帮助。