node.js - MySQL 查询如何使用和不使用占位符(?)?

标签 node.js

我有两种在 node.js 中执行 sql 查询的方法,我想知道这两种方法之间的区别。推荐使用哪一个 ? 以及为什么 ??

第一种方法

var userId = 1;
var columns = ['username', 'email'];    
var query = connection.query('SELECT ?? FROM ?? WHERE id = ?', 
  [columns, 'users', userId], function(err, results) 
{   
  // ... 
});

第二种方法

var userId = 1;
var query = connection.query('SELECT username,email FROM UserTable WHERE id=?', 
  [userId], function(err, results) 
{   
  // ... 
});

请告诉我这两种机制的具体用法。

最佳答案

替换字符串中的双问号语法 ?? 在将替换参数发送到服务器之前用分隔符将它们包装起来。分隔符适用于表名和列名。所以你的第一个例子,'SELECT ??从 ?? WHERE id = ?' 发送

SELECT `username`, `email` FROM `users` WHERE id = '1'

到服务器。

第二个,'SELECT username,email FROM UserTable WHERE id=?',发送

SELECT username,email FROM UserTable WHERE id='1'

关于node.js - MySQL 查询如何使用和不使用占位符(?)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41614189/

相关文章:

node.js\为什么我会收到 RangeError : Maximum call stack size exceeded

javascript - Bluebird - Promise 跟踪进度

node.js - 使用交叉应用程序识别前台应用程序

macos - 运行已安装的 npm 模块时出现命令错误

node.js - NodeJs 错误 - 无法加载 gRPC 二进制模块,因为它没有为当前系统预期目录安装?

javascript - 将对象和函数转换为有效的 JavaScript 源代码?

node.js - webSocketServer node.js如何区分客户端

javascript - gulp - 我必须为每个项目安装插件吗?

javascript - Promise.allSettled 在 babel ES6 实现中

node.js - Passport Node.js 本地身份验证不起作用