данные не могут быть вставлены с использованием транзакции PHP MySQL - PullRequest
0 голосов
/ 21 сентября 2018

Моя ситуация:

Я должен создать систему электронного обучения, где лекторы (пользователи) будут загружать задания.Пользователь будет вводить детали назначения (имя, описание и т. Д.), А также загружать файл (ы).Я попытался выполнить многократную загрузку файла с транзакцией, чтобы вставить данные в две таблицы, одна из которых содержит детали назначения, а другая - для файлов, загруженных в одно назначение.

У меня есть 2 связанные таблицы:

1) назначение - где будут храниться все детали назначения

2) файл назначения - где будет сохранен весь путь к файлу

Я ссылался на несколько сообщений, подобных этому:

Вставка нескольких таблиц с транзакциями в mysql

PHP & MySQL: простой код для реализации транзакции -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 
}

Что я сделал не так?Ошибка не отображается, но данные не вставляются в базу данных.Есть лучший способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...