我有一個表,其中一個字段爲唯一並且在其中有一些記錄。我需要插入一些新的記錄(一些記錄可能已經存在於表中),而不會使查詢失敗。在Zend Framework中忽略重複使用INSERT IGNORE 2
In plain MySQL;我可以寫使用忽略關鍵字作爲INSERT忽略該查詢...
如何指定INSERT忽略在Zend框架2 DB
我有一個表,其中一個字段爲唯一並且在其中有一些記錄。我需要插入一些新的記錄(一些記錄可能已經存在於表中),而不會使查詢失敗。在Zend Framework中忽略重複使用INSERT IGNORE 2
In plain MySQL;我可以寫使用忽略關鍵字作爲INSERT忽略該查詢...
如何指定INSERT忽略在Zend框架2 DB
你仍然可以做,在普通的MySQL如果你喜歡。
$ sql =「INSERT ...」;這樣
GET適配器如果您使用tablegateway或定義適配器documentation
$adapter = $this->tableGateway->getAdapter();
$resultset = $adapter->query($sql,array());
$rowData= $resultset->getAffectedRows();
如果使用\Zend\Db\Sql\Insert
你可以創建擴展類並覆蓋getSqlString(...)
:
\src\MyNamespace\Zend\Db\Sql\Insert.php
<?php
namespace MyNamespace\Zend\Db\Sql;
class Insert extends \Zend\Db\Sql\Insert {
/**
* @var bool
*/
public $ignore = false;
public function getSqlString(\Zend\Db\Adapter\Platform\PlatformInterface $adapterPlatform = null) {
if ($this->ignore !== true) {
return parent::getSqlString($adapterPlatform);
}
return preg_replace('/^INSERT/', 'INSERT IGNORE', parent::getSqlString($adapterPlatform), 1);
}
}
用法:
$insert = new \MyNamespace\Zend\Db\Sql\Insert();
$insert->ignore = true;
我使用這個:
use Zend\Db\Sql\Insert;
class InsertIgnore extends Insert
{
/**
* @var array Specification array
*/
protected $specifications = [
self::SPECIFICATION_INSERT => 'INSERT IGNORE INTO %1$s (%2$s) VALUES (%3$s)',
self::SPECIFICATION_SELECT => 'INSERT IGNORE INTO %1$s %2$s %3$s',
];
}
在實踐
//$action = $sql->insert(); // Before
$action = new InsertIgnore($sql->getTable()); // After
$action->values($data);
Bingo。這只是工作。 – 2016-02-07 02:36:15
感謝@ dixromos98。目前我正在使用查詢方法。 ZF2中是否有本地方法來執行INSERT IGNORE查詢? – 2014-09-09 09:59:26
你可以修改INSERT查詢的答案嗎?由於問題是關於INSERT查詢的;其他人查看答案會更好。 – 2014-09-09 10:08:48
我看了一下,但似乎不支持插入忽略。正如我在教程中看到的那樣,正在使用的邏輯解決方案是檢查是否存在主鍵,然後對該行執行更新。那就是如果你不想要簡單查詢 – dixromos98 2014-09-09 12:41:50