无法弄清楚为什么SQL DELETE FROM语句返回错误“SQLSTATE [HY000]:一般错误:25绑定或列索引超出范围”

时间:2012-11-18 05:14:43

标签: php sqlite pdo

所以,这是我页面中的相关代码。它通过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 个答案:

答案 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命令。