不能使用事务PHP MySQL

时间:2018-09-21 03:43:51

标签: php mysql file transactions upload

我的情况:

我必须做一个电子学习系统,讲师(用户)将在其中上传作业。用户将输入作业详细信息(名称,说明等),并上传文件。我尝试使用事务进行多个文件上传,以将数据插入到两个表中,一个包含任务的详细信息,另一个包含在一个任务中上传的文件。

我有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 
}

我做错了什么?没有显示错误,但数据未插入数据库。有一个更好的方法吗?

0 个答案:

没有答案