首页 > 解决方案 > 无法使用事务 PHP MySQL 插入数据

问题描述

我的情况:

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

我有 2 个相关的表:

1) assignment - 将存储所有分配详细信息

2) assignmentfile - 将存储所有文件路径

我已经提到了几个这样的帖子:

在mysql中插入多个带有事务的表

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 
}

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

标签: phpmysqlfiletransactionsupload

解决方案


推荐阅读