【发布时间】:2012-10-14 06:31:35
【问题描述】:
我正在尝试使用 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,它就行不通。
我错过了什么?还有什么我可以尝试的吗?
【问题讨论】:
-
您确定
$_post不为空吗? -
请注意,如果没有相应的
BEGIN,则不允许使用COMMIT。此外,PHP 将只执行查询字符串中的第一个;-delimited 命令。 -
是的,我相信提交是从我的旧旧测试中遗留下来的。此外,$_POST 不为空。我已经打印了很多次了。此外,使用相同初始化部分的 INSERT 路径也可以正常工作。