diff --git a/MysqliDb.php b/MysqliDb.php index 6a55bddf..aa05e187 100644 --- a/MysqliDb.php +++ b/MysqliDb.php @@ -774,39 +774,47 @@ public function insert($tableName, $insertData) * * @return bool|array Boolean indicating the insertion failed (false), else return id-array ([int]) */ - public function insertMulti($tableName, array $multiInsertData, array $dataKeys = null) + public function insertMulti($tableName, $multiInsertData, $dataKeys = null) { // only auto-commit our inserts, if no transaction is currently running $autoCommit = (isset($this->_transaction_in_progress) ? !$this->_transaction_in_progress : true); $ids = array(); - + $options = [ + '_queryOptions' => $this->_queryOptions, + '_nestJoin' => $this->_nestJoin, + '_forUpdate' => $this->_forUpdate, + '_lockInShareMode' => $this->_lockInShareMode + ]; + if($autoCommit) { $this->startTransaction(); } - + foreach ($multiInsertData as $insertData) { if($dataKeys !== null) { // apply column-names if given, else assume they're already given in the data $insertData = array_combine($dataKeys, $insertData); } - + foreach ($options as $k => $v) { + $this->{$k} = $v; + } $id = $this->insert($tableName, $insertData); - if(!$id) { - if($autoCommit) { + if(!$id ) { + if($autoCommit && !in_array('IGNORE', $options['_queryOptions'])) { $this->rollback(); } - return false; + return $id; } $ids[] = $id; - } - + } + if($autoCommit) { $this->commit(); - } - + } + return $ids; } - + /** * Replace method to add new row *