Js mysql 查询不使用 GET 请求给出的布尔值
Js mysql query not using boolean value given with GET request
我正在尝试在 MySQL 数据库中搜索 active 或 inactive 值为 isActive 的用户,想法是 GET 请求 与 isActive=true
或 isActive=false
一起发送,所有活跃或不活跃的用户都将在响应中发送。问题是 isActive
值没有被使用,我只能通过将它硬编码到 SQL 查询中来让它工作。
当我发送一个定义了 firstName
值的请求时它确实有效,所以我认为这可能与 isActive
是 boolean
并且没有正确转换有关,但是我没能解决这个问题。
此外,我正在为数据库使用 MySQL2。
如有任何帮助,我们将不胜感激。
getUsers: (req, res, next) => {
const queryParams = req.query
logger.debug(queryParams)
let { firstName, isActive } = req.query
let queryString = 'SELECT * FROM `user`'
if (firstName || isActive) {
queryString += ' WHERE '
if (firstName) {
queryString += '`firstName` LIKE ?'
firstName = '%' + firstName + '%'
}
if (firstName && isActive) queryString += ' AND '
if (isActive) {
queryString += '`isActive` = ?'
}
}
queryString += ';'
logger.debug(`queryString = ${queryString}`)
dbconnection.getConnection(function (err, connection) {
if (err) next(err) // not connected!
// Use the connection
connection.query(queryString, [firstName, isActive], function (error, results) {
// When done with the connection, release it.
connection.release()
// Handle error after the release.
if (error) next(error)
// Don't use the connection here, it has been returned to the pool.
logger.debug('#results = ', results.length)
res.status(200).json({
status: 200,
results: results,
})
}
)
})
},
这是我调用 GET 方法时的日志:
2022-05-20T14:16:12Z [DEBUG] user.controller.js:66 : { isActive: 'false' }
2022-05-20T14:16:12Z [DEBUG] user.controller.js:83 : queryString = SELECT * FROM `user` WHERE `isActive` = ?;
2022-05-20T14:16:13Z [DEBUG] dbconnection.js:23 : Connected to database '2186751'
2022-05-20T14:16:13Z [DEBUG] dbconnection.js:27 : Connection 46 acquired
2022-05-20T14:16:13Z [DEBUG] dbconnection.js:31 : Connection 46 released
2022-05-20T14:16:13Z [DEBUG] user.controller.js:97 : #results = 0
firstName
和 isActive
在 MySQL 数据库中的定义:
`firstName` varchar(255) NOT NULL,
`isActive` tinyint NOT NULL DEFAULT '1',
您需要将 true/false
转换为 1/0
以获得 MySQL 以理解布尔值。
此外,由于您是动态构建查询字符串,因此还必须动态构建参数数组,以便参数与占位符相匹配。
getUsers: (req, res, next) => {
const queryParams = req.query
logger.debug(queryParams)
let {
firstName,
isActive
} = req.query
let queryString = 'SELECT * FROM `user`'
let params = [];
if (firstName || isActive) {
queryString += ' WHERE '
if (firstName) {
queryString += '`firstName` LIKE ?'
firstName = '%' + firstName + '%'
params.push(firstName);
}
if (firstName && isActive) queryString += ' AND '
if (isActive) {
queryString += '`isActive` = ?'
params.push(isActive == 'true' ? 1 : 0);
}
}
queryString += ';'
logger.debug(`queryString = ${queryString}`);
logger.debug(`params = ${JSON.stringify(params)}`)
dbconnection.getConnection(function(err, connection) {
if (err) next(err) // not connected!
// Use the connection
connection.query(queryString, params, function(error, results) {
// When done with the connection, release it.
connection.release()
// Handle error after the release.
if (error) next(error)
// Don't use the connection here, it has been returned to the pool.
logger.debug('#results = ', results.length)
res.status(200).json({
status: 200,
results: results,
})
})
})
},
我正在尝试在 MySQL 数据库中搜索 active 或 inactive 值为 isActive 的用户,想法是 GET 请求 与 isActive=true
或 isActive=false
一起发送,所有活跃或不活跃的用户都将在响应中发送。问题是 isActive
值没有被使用,我只能通过将它硬编码到 SQL 查询中来让它工作。
当我发送一个定义了 firstName
值的请求时它确实有效,所以我认为这可能与 isActive
是 boolean
并且没有正确转换有关,但是我没能解决这个问题。
此外,我正在为数据库使用 MySQL2。
如有任何帮助,我们将不胜感激。
getUsers: (req, res, next) => {
const queryParams = req.query
logger.debug(queryParams)
let { firstName, isActive } = req.query
let queryString = 'SELECT * FROM `user`'
if (firstName || isActive) {
queryString += ' WHERE '
if (firstName) {
queryString += '`firstName` LIKE ?'
firstName = '%' + firstName + '%'
}
if (firstName && isActive) queryString += ' AND '
if (isActive) {
queryString += '`isActive` = ?'
}
}
queryString += ';'
logger.debug(`queryString = ${queryString}`)
dbconnection.getConnection(function (err, connection) {
if (err) next(err) // not connected!
// Use the connection
connection.query(queryString, [firstName, isActive], function (error, results) {
// When done with the connection, release it.
connection.release()
// Handle error after the release.
if (error) next(error)
// Don't use the connection here, it has been returned to the pool.
logger.debug('#results = ', results.length)
res.status(200).json({
status: 200,
results: results,
})
}
)
})
},
这是我调用 GET 方法时的日志:
2022-05-20T14:16:12Z [DEBUG] user.controller.js:66 : { isActive: 'false' }
2022-05-20T14:16:12Z [DEBUG] user.controller.js:83 : queryString = SELECT * FROM `user` WHERE `isActive` = ?;
2022-05-20T14:16:13Z [DEBUG] dbconnection.js:23 : Connected to database '2186751'
2022-05-20T14:16:13Z [DEBUG] dbconnection.js:27 : Connection 46 acquired
2022-05-20T14:16:13Z [DEBUG] dbconnection.js:31 : Connection 46 released
2022-05-20T14:16:13Z [DEBUG] user.controller.js:97 : #results = 0
firstName
和 isActive
在 MySQL 数据库中的定义:
`firstName` varchar(255) NOT NULL,
`isActive` tinyint NOT NULL DEFAULT '1',
您需要将 true/false
转换为 1/0
以获得 MySQL 以理解布尔值。
此外,由于您是动态构建查询字符串,因此还必须动态构建参数数组,以便参数与占位符相匹配。
getUsers: (req, res, next) => {
const queryParams = req.query
logger.debug(queryParams)
let {
firstName,
isActive
} = req.query
let queryString = 'SELECT * FROM `user`'
let params = [];
if (firstName || isActive) {
queryString += ' WHERE '
if (firstName) {
queryString += '`firstName` LIKE ?'
firstName = '%' + firstName + '%'
params.push(firstName);
}
if (firstName && isActive) queryString += ' AND '
if (isActive) {
queryString += '`isActive` = ?'
params.push(isActive == 'true' ? 1 : 0);
}
}
queryString += ';'
logger.debug(`queryString = ${queryString}`);
logger.debug(`params = ${JSON.stringify(params)}`)
dbconnection.getConnection(function(err, connection) {
if (err) next(err) // not connected!
// Use the connection
connection.query(queryString, params, function(error, results) {
// When done with the connection, release it.
connection.release()
// Handle error after the release.
if (error) next(error)
// Don't use the connection here, it has been returned to the pool.
logger.debug('#results = ', results.length)
res.status(200).json({
status: 200,
results: results,
})
})
})
},