2

我正在尝试使用 SQLite 更新 PHP 中的表。我的代码如下:

//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 数据($sub3 不是来自 $_POST)。

如果我对这些值进行硬编码,它可以正常工作。我在同一代码路径中也有一个插入语句(首先检查它是否是新数据,如果不是则执行 INSERT)。每次插入都可以正常工作(来自 $_POST 的数据)。

此外,我为其他三个表提供了这样的代码,所有这些表都有效。这是唯一没有的表。与其他人相比,桌子的设置没有什么不同。

这个适用于另一张桌子:

$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 回答