我想这几行代码有问题
app.post('/delete/:id',(req,res)=>{
db.execute(`DELETE FROM 'tabel' WHERE id = ${req.params.id}`)
res.redirect('/')
})
当我试图删除一些东西时,它会给我'42 S22'状态,每次我尝试它时都会得到一个错误。这是我在Ejs中的窗体的样子
<% data.forEach(row=>{ %>
<form action="/delete/<%= row.id %>" method="POST">
<input type="submit" value="X">
</form>
<% }) %>
此代码是在Nodejs和MySql中编写的!
我试过在youtube和谷歌搜索,但我不能得到正确的答案,所以我希望我会得到正确的答案在这里由我的小伙子大学!
1条答案
按热度按时间6vl6ewon1#
我发现你的代码有些问题。
首先,在
DELETE
语句中使用单引号将表名括起来,但应该使用反引号(')。在SQL中,单引号用于将字符串值括起来,而反引号用于将表名和列名括起来。第二,您使用
req
对象的params
属性来访问路由中的id
参数,但此属性用于访问路由路径本身中的参数,因此如果您的路由定义为/delete/:id
,则可以使用req.params.id
访问id
参数。如果id
参数作为查询字符串或请求正文的一部分传递,则需要使用req
对象的不同属性来访问它。例如,如果id
参数作为查询字符串传递,则可以使用req.query. id来访问它。以下是应用这些更改后的代码外观:
但是,这段代码仍然容易受到SQL注入攻击,因为您使用字符串插值来构造SQL查询,而应该使用参数化查询来避免这个问题。
下面是一个如何使用参数化查询重写代码的示例:
在本例中,我用
?
占位符替换了字符串插值,并将id
值作为附加参数传递给execute
方法,这样数据库驱动程序就可以正确地转义id
值,防止SQL注入攻击。