1

だから、ここに私のページからの関連コードがあります。ページ上のフォームを介して更新する PDO を介して sqlite3 データベースに接続します。INSERTS や UPDATES (WHERE id=:id を使用する) など、問題なく動作する他の sqlite ステートメントがあります。ただし、この 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

bind_param メソッドに PDO::PARAM_INT を追加してみてください。送信される値が INT であることを確認してください (ID フィールドは INT であると想定しています)。つまり、

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

私はついにそれを理解しました。私の実際のページには、正しい文字列を作成するための if-else コンストラクトがたくさんあり$updateます。私は(間違って) 、各 update ステートメントに必要な s のbindParam()数に注意を払うことなく、最後に使用できると考えました。bindParam()したがって、私の場合、 だけでなく、他の文字列でDELETE FROM pages WHERE id=:idのみ使用される他のパラメーターが多数提供されていました。$update:id

ソース全体を含めなかったのは私のせいです。ここの誰かがすぐにそれを見つけたと確信していますが、デュエルジーのおかげで、彼/彼女は実際の SQL ステートメントをログに記録する方法を探す正しい道に私を導いてくれました。結局、 を使用stmt->debugDumpParams();することで、自分が何を間違っていたのかを理解することができました。

于 2012-11-19T14:09:44.453 に答える
0

実際の sql ステートメントをエコーし​​、実際に実行する前に終了します。次に、ステートメントを直接検査して実行します。あなた$_POST['id']が考えていることは含まれていないと思います。

于 2012-11-18T21:22:25.010 に答える
-1

DELETEコマンドを 1 行で記述してみてください。

于 2012-11-18T21:13:54.833 に答える