我想使用带有选项ON DUPLICATE KEY UPDATE的Zend\Db\Sql\Insert插入一些数据
其实我用的是这种查询:
INSERT INTO `user_data` (`user_id`, `category`, `value`)
VALUES (12, 'cat2', 'my category value')
ON DUPLICATE KEY UPDATE `user_id`=VALUES(`user_id`), `category`=VALUES(`category`), `value`=VALUES(`value`);
与
$this->dbAdapter->query($sql, Adapter::QUERY_MODE_EXECUTE);
但是我如何使用 Zend\Db\Sql\Insert 生成上述查询?
感谢任何建议。 干杯
最佳答案
也许这个解决方案可以帮到您。
https://gist.github.com/newage/227d7c3fb8202e473a76
/**
* Use INSERT ... ON DUPLICATE KEY UPDATE Syntax
* @since mysql 5.1
* @param array $insertData For insert array('field_name' => 'field_value')
* @param array $updateData For update array('field_name' => 'field_value_new')
* @return bool
*/
public function insertOrUpdate(array $insertData, array $updateData)
{
$sqlStringTemplate = 'INSERT INTO %s (%s) VALUES (%s) ON DUPLICATE KEY UPDATE %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 = [];
foreach ($insertData as $column => $value) {
$insertQuotedValue[] = $driver->formatParameterName($column);
$insertQuotedColumns[] = $platform->quoteIdentifier($column);
$parameterContainer->offsetSet($column, $value);
}
/* Preparation update data */
$updateQuotedValue = [];
foreach ($updateData as $column => $value) {
$updateQuotedValue[] = $platform->quoteIdentifier($column) . '=' . $driver->formatParameterName('update_' . $column);
$parameterContainer->offsetSet('update_'.$column, $value);
}
/* Preparation sql query */
$query = sprintf(
$sqlStringTemplate,
$tableName,
implode(',', $insertQuotedColumns),
implode(',', array_values($insertQuotedValue)),
implode(',', $updateQuotedValue)
);
$statementContainer->setSql($query);
return $statementContainer->execute();
}
关于php - ZF2 + Zend\Db\Sql\Insert + 重复 key 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004097/