1

所以,这是我页面上的相关代码。它通过 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();
?>
4

4 回答 4

1

尝试将 PDO::PARAM_INT 添加到 bind_param 方法,以确保发送的值是一个 INT (我假设你的 ID 字段是),即,

$stmt->bindParam(':id', $id, PDO::PARAM_INT);
于 2012-11-18T06:51:47.117 回答
0

回显实际的 sql 语句并在实际运行之前终止。然后直接检查并运行该语句。我怀疑$_POST['id']不包含您认为的内容。

于 2012-11-18T21:22:25.010 回答
0

我终于弄明白了。在我的实际页面中,我有一堆 if-else 构造来构造正确的$update字符串。我(错误地)认为我可以bindParam()在最后使用而不注意bindParam()每个更新语句需要多少 s。因此,对于我的DELETE FROM pages WHERE id=:id,它被提供了一大堆仅用于其他$update字符串的其他参数,而不仅仅是:id.

Its my fault for not including the entire source, I'm sure someone here would have caught it right away, but many thanks to duellsy, he/she led me on the right path looking for ways to log the actual SQL statement. In the end, using stmt->debugDumpParams(); helped me figure what I was doing wrong.

于 2012-11-19T14:09:44.453 回答
-1

DELETE尝试在一行中编写命令。

于 2012-11-18T21:13:54.833 回答