Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save OrlandoST/a06f0e5edd651b20c293e714dba6d84f to your computer and use it in GitHub Desktop.
Save OrlandoST/a06f0e5edd651b20c293e714dba6d84f to your computer and use it in GitHub Desktop.
MySql multi insert for ZF2
/**
* Insert many rows as one query
* @param array $data Insert array(array('field_name' => 'field_value'), array('field_name' => 'field_value_new'))
* @return bool
*/
public function multiInsert(array $data)
{
$sqlStringTemplate = 'INSERT INTO %s (%s) VALUES %s';
$adapter = $this->tableGateway->adapter; /* Get adapter from tableGateway */
$driver = $adapter->getDriver();
$platform = $adapter->getPlatform();
$tableName = $platform->quoteIdentifier('table_name');
$parameterContainer = new ParameterContainer();
$statementContainer = $adapter->createStatement();
$statementContainer->setParameterContainer($parameterContainer);
/* Preparation insert data */
$insertQuotedValue = [];
$insertQuotedColumns = [];
$i = 0;
foreach ($data as $insertData) {
$fieldName = 'field' . ++$i . '_';
$oneValueData = [];
$insertQuotedColumns = [];
foreach ($insertData as $column => $value) {
$oneValueData[] = $driver->formatParameterName($fieldName . $column);
$insertQuotedColumns[] = $platform->quoteIdentifier($column);
$parameterContainer->offsetSet($fieldName . $column, $value);
}
$insertQuotedValue[] = '(' . implode(',', $oneValueData) . ')';
}
/* Preparation sql query */
$query = sprintf(
$sqlStringTemplate,
$tableName,
implode(',', $insertQuotedColumns),
implode(',', array_values($insertQuotedValue))
);
$statementContainer->setSql($query);
return $statementContainer->execute();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment