2

PHP のテーブルを SQLite で更新しようとしています。私のコードは次のとおりです。

//Get params like this
$title = $_POST['title'];
...
$params = array($visible, $link, $title, $post, $month, $day, $year, $sub3);
$query = "UPDATE posts SET visible = ?, link = ?, title = ?, entries = ?, month = ?, day = ?, year = ? WHERE id = ?; COMMIT;";
$stmt = $db->prepare($query);
$result = $stmt->execute($params);

$_POST から値を取得すると、99% の確率でステートメントを実行するまでに、$_POST データではなくフィールドで null 値が更新されます ($sub3 は $_POST からのものではありません)。

値をハードコーディングすると、正常に動作します。同じコードパスにinsertステートメントもあります(最初に新しいデータかどうかを確認し、そうでない場合はINSERTを実行します)。挿入は毎回正常に機能します ($_POST からのデータ)。

また、他の 3 つのテーブルにもこのようなコードがあり、すべて機能します。これは、そうでない唯一のテーブルです。他のテーブルと比べて、テーブルのセットアップに違いはありません。

これは別のテーブルで機能します。

$params = array($name, $username, $email, $level, $sub3);
$query = "UPDATE users SET name = ?, username = ?, email = ?, level = ? WHERE id = ?; COMMIT;";
$stmt = $db->prepare($query);
$result = $stmt->execute($params);

私はbindParam、bindValue、文文字列を準備せずに手動で作成しようとしましたが、$_POSTからのものである限り、うまくいきません。

私は何が欠けていますか?他に試せることはありますか?

4

1 に答える 1

0

POST 変数を出力し、正しいデータがあるかどうかを確認します。

print_r($_POST);

編集: クエリを変更します。

//$params = array($visible, $link, $title, $post, $month, $day, $year, $sub3);
$query = "UPDATE posts SET visible = '$visible', link = '$link', title = '$title', entries = '$entries', month = '$month', day = '$day', year = '$year' WHERE id = $id;  COMMIT;";

$id が正しいことを確認してください

于 2012-10-24T08:37:22.323 に答える