php - 无法使用事务 PHP MySQL 插入数据
问题描述
我的情况:
我必须做一个电子学习系统,讲师(用户)将在其中上传作业。用户将输入分配详细信息(名称、描述等)并上传文件。我尝试使用事务进行多个文件上传,以将数据插入到两个表中,一个包含分配的详细信息,另一个用于在一个分配中上传的文件。
我有 2 个相关的表:
1) assignment - 将存储所有分配详细信息
2) assignmentfile - 将存储所有文件路径
我已经提到了几个这样的帖子:
PHP & mySQL:实现事务的简单代码 - 提交 & 回滚
我尝试这样编写代码,但不知何故我的数据无法插入数据库。
这是我的连接代码:
$host = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
// Create connection
$con = new mysqli($host, $dbusername, $dbpassword, $dbname);
// Check connection
if (mysqli_connect_error()){
die('Connect Error ('. mysqli_connect_errno() .') '
. mysqli_connect_error());
}
这是我的交易代码:
for ($i = 0; $i < count($_FILES['filename']['name']); $i++) {
$filename = $_FILES['filename']['name'][$i];
$target = "upload/";
$filetarget = $target.$filename;
$tempfilename = $_FILES["filename"]["tmp_name"][$i];
$result = move_uploaded_file($tempfilename,$filetarget);
if($result) {
// disable autocommit
mysqli_autocommit($con, FALSE);
$con->begin_transaction();
$con-> query("INSERT INTO assignment (assignid, topicid,classid,a_name,description,startdate,duedate,cutoffdate)VALUES ((SELECT topicid FROM topic WHERE topicid = '$topicid'),(SELECT classid FROM class WHERE classid = '$classid'),'$a_name','$description','$startdate','$duedate','$cutoffdate')");
// last inserted id for assignid
$assignid = mysqli_insert_id($con);
$con->query("INSERT INTO assignmentfile (fileid, assignid, filename, filetarget) VALUES ((SELECT assignid FROM assignment where assignid = '$assignid'), '$filename','$filetarget')");
$con->commit();
} // end of result
else {
$con->rollback();
}
} // end of for loop
}
我做错了什么?没有显示错误,但数据没有插入到数据库中。有一个更好的方法吗?
解决方案
推荐阅读
- python - ap.add_argument() 的语法
- facebook - 页面相册应用
- amazon-web-services - KAFKA 经纪人抛出错误的请求类型 18 和错误的请求类型 16
- java - 导入 jar 文件后 Eclipse 无法识别类
- json - 使用 gson 检索动态 JSON 并改造返回 null?
- angular - 隐藏一些表单字段并在后台为其提供数据
- wpf - 图表每个点的分隔符
- php - 根据用户在 laravel 上的角色过滤用户的小型系统
- guzzle6 - 请求返回发布的正文后 Guzzle getBody()
- php - 仅返回数组 php 中存在的值