所以,这是我页面中的相关代码。它通过PDO连接到sqlite3数据库,我通过页面上的表单更新。我有其他sqlite语句,如INSERTS和UPDATES(确实使用WHERE id =:id),没有问题。但是,这个DELETE不会。我确实在我的页面上有一个try catch块中的所有代码(这就是我如何得到错误,如果你想知道)但我想我可以在这里省略它。
感谢您的帮助!
<?php
$db = new PDO("sqlite:osuat.sqlite3");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$id = $_POST['id'];
$update = "DELETE FROM pages
WHERE id=:id";
$stmt = $db->prepare($update);
$stmt->bindParam(':id', $id);
$stmt->execute();
?>
答案 0 :(得分:1)
尝试将PDO :: PARAM_INT添加到bind_param方法,以确保发送的值是INT(我假设您的ID字段是),即
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
答案 1 :(得分:0)
回显实际的sql语句并在实际运行之前死掉。然后直接检查并运行语句。我怀疑$_POST['id']
不包含您的想法。
答案 2 :(得分:0)
我终于明白了。在我的实际页面中,我有一堆if-else结构,以构造正确的$update
字符串。我(错误地)认为我最后可以使用bindParam()
而不必注意每个更新语句需要多少bindParam()
个。因此,对于我的DELETE FROM pages WHERE id=:id
,它提供了一大堆仅在其他$update
字符串中使用的其他参数,而不仅仅是:id
。
我的错误是不包括整个来源,我相信这里有人会马上抓住它,但很多感谢duellsy,他/她带领我走上正确的道路寻找记录实际SQL语句的方法。最后,使用stmt->debugDumpParams();
帮助我弄清楚我做错了什么。
答案 3 :(得分:-1)
尝试在一行中编写DELETE
命令。