如何使用 express 修复 node.js 中的 ER_PARSE_ERROR
How to fix ER_PARSE_ERROR in node.js using express
我正在使用 express 在 node.js 中设置一个 crud,我已经完成了创建和更新,但我仍然卡在删除功能中
我试着分析了handlebars的代码和/delete的路径,但还是没搞明白为什么user_id无法读取
user_list_view.hbs:
<form id="add-row-form" action="/delete" method="post">
<div class="modal fade" id="DeleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">Delete Product</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<strong>Do you want to delete this data ?</strong>
</div>
<div class="modal-footer">
<input type="hidden" name="user_id" class="form-control user_id" required>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-success">Delete</button>
</div>
</div>
</div>
</div>
jquery 在 user_list_view.js:
<script>
$(document).ready(function () {
$('#mytable').on('click','.delete',function(){
var user_id = $(this).data('user_id');
$('#DeleteModal').modal('show');
$('.user_id').val(user_id);
});
})
process.js:
router.post('/delete', (req,res) => {
let sql = "DELETE FROM users WHERE user_id="+req.body.user_id
let query = db.query(sql, (err, results) => {
if (err) throw err
res.redirect('/user_list')
})
})
module.exports = router
我预计结果会根据 user_id 删除所选用户,但我收到错误消息:
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "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 ''at line 1",
sqlState: '42000',
index: 0,
sql: 'DELETE FROM users WHERE user_id='
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! latihan3@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
在 mysql 的 .query 语法中,它需要 2 个参数,但第一个是您的查询,第二个是参数,而不是回调。除非你把它包裹起来才能那样工作。
https://mariadb.com/kb/en/library/connector-nodejs-promise-api/
// DON'T HAVE TO DO THIS "DELETE FROM users WHERE user_id="+req.body.user_id
let query = db.query('DELETE FROM users WHERE user_id=,[req.body.user_id]).then(results => {
if (err) throw err
res.redirect('/user_list')
})
我正在使用 express 在 node.js 中设置一个 crud,我已经完成了创建和更新,但我仍然卡在删除功能中
我试着分析了handlebars的代码和/delete的路径,但还是没搞明白为什么user_id无法读取
user_list_view.hbs:
<form id="add-row-form" action="/delete" method="post">
<div class="modal fade" id="DeleteModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="myModalLabel">Delete Product</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
</div>
<div class="modal-body">
<strong>Do you want to delete this data ?</strong>
</div>
<div class="modal-footer">
<input type="hidden" name="user_id" class="form-control user_id" required>
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-success">Delete</button>
</div>
</div>
</div>
</div>
jquery 在 user_list_view.js:
<script>
$(document).ready(function () {
$('#mytable').on('click','.delete',function(){
var user_id = $(this).data('user_id');
$('#DeleteModal').modal('show');
$('.user_id').val(user_id);
});
})
process.js:
router.post('/delete', (req,res) => {
let sql = "DELETE FROM users WHERE user_id="+req.body.user_id
let query = db.query(sql, (err, results) => {
if (err) throw err
res.redirect('/user_list')
})
})
module.exports = router
我预计结果会根据 user_id 删除所选用户,但我收到错误消息:
code: 'ER_PARSE_ERROR',
errno: 1064,
sqlMessage: "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 ''at line 1",
sqlState: '42000',
index: 0,
sql: 'DELETE FROM users WHERE user_id='
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! latihan3@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
在 mysql 的 .query 语法中,它需要 2 个参数,但第一个是您的查询,第二个是参数,而不是回调。除非你把它包裹起来才能那样工作。
https://mariadb.com/kb/en/library/connector-nodejs-promise-api/
// DON'T HAVE TO DO THIS "DELETE FROM users WHERE user_id="+req.body.user_id
let query = db.query('DELETE FROM users WHERE user_id=,[req.body.user_id]).then(results => {
if (err) throw err
res.redirect('/user_list')
})