我正在开展一个学校项目,为我的作品集网站创建 CMS。我的更新功能无法正常工作。我有一种感觉,这与我构建 PDO 事务的方式有关。在我的数据库中,我有一个项目表、类别表和关联的 content_category 表。我可以很好地将我的项目插入到这些表中。我想要做的是插入到我的项目表中,然后删除 content_category 表中的所有记录,最后将当前类别记录插入到该关联表中以完成事务。我确实收到了“项目已更新”的退货声明。但表格没有更新。有人有什么想法吗?
这是代码:
这是我的 Project 类中的一个函数。
public function update(){
try {
$conn = getConnection();
$conn->beginTransaction();
$sql = "UPDATE project
SET project_title = :title,
project_description = :desc,
project_isFeatured = :feat,
project_mainImage = :image
WHERE project_id = :id";
$st = $conn->prepare($sql);
$st->bindValue(":id", $this->id, PDO::PARAM_INT);
$st->bindValue(":title", $this->title, PDO::PARAM_STR);
$st->bindValue(":desc", $this->description, PDO::PARAM_STR);
$st->bindValue(":feat", $this->isFeatured, PDO::PARAM_BOOL);
$st->bindValue(":image", $this->mainImage, PDO::PARAM_INT);
$st->execute();
$sql = "DELETE from content_category
WHERE content_id = :id";
$st = $conn->prepare($sql);
$st->bindValue("id", $this->id, PDO::PARAM_INT);
$st->execute();
$sql = "INSERT into content_category (content_id, cat_id)
VALUES (?,?)";
$st = $conn->prepare($sql);
foreach($this->categories as $key=>$value){
$st->execute(array(intval($projectID), intval($value)));
}
$conn->commit();
$conn = null;
return "Project updated";
}
catch(Exception $e) {
echo $e->getMessage();
$conn->rollBack();
return "Error... Unable to update!";
}
}
表的数据库引擎需要是 INNODB。如果您使用 phpMyAdmin,它默认为 MyISAM。 (我不知道这是否会导致更新无法通过或只是事务行被忽略。编辑:很确定文档说如果您在 myISAM 上开始事务,它将抛出错误并且不会执行任何操作)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)