我的情况:
我必须做一个电子学习系统,讲师(用户)将在其中上传作业。用户将输入作业详细信息(名称,说明等),并上传文件。我尝试使用事务进行多个文件上传,以将数据插入到两个表中,一个包含任务的详细信息,另一个包含在一个任务中上传的文件。
我有2个相关的表:
1)作业-所有作业详细信息将存储在其中
2)分配文件-所有文件路径都将存储在其中
我已经提到过几条这样的帖子:
Inserting multiple tables with transaction in mysql
PHP & mySQL: Simple code to implement Transaction - Commit & Rollback
我尝试过这样的编码,但是以某种方式无法将我的数据插入数据库中。
这是我的连接代码:
$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
}
我做错了什么?没有显示错误,但数据未插入数据库。有一个更好的方法吗?