我正在使用Symfony2框架和Doctrine DBAL,将一些数据插入到MySQL数据库中。插入操作大致如下(简化版):
$conn->insert('sometable', array(
"col1" => $data1,
"col2" => $data2,
"col3" => $data3
));
我希望实现的功能类似于普通SQL-has。例如:
INSERT IGNORE
,如果不存在就进行插入。但是使用DBAL能否实现这样的功能?请注意,我在这里没有使用对象。
编辑:请注意,我没有使用对象,而是使用了DBAL所描述的数组插入方法。
编辑2:我尝试使用建议的try-catch来解决问题,它似乎工作得很好,除了一个问题。即使没有添加新行,数据库也会自动增加主键。
以下是我使用的代码:
try{
$conn->insert('sometable', array(
"col1" => $data1,
"col2" => $data2,
"col3" => $data3
));
} catch( \Exception $e) {
switch (get_class($e)) {
case 'Doctrine\DBAL\DBALException':
// No problems here. Just means that the row already existed.
break;
default:
$this->get('logger')->error("(ERROR in ".__METHOD__.", @Row: ".(__LINE__)."): DB-error! error: ".$e->getMessage());
break;
}
}
我还必须为表格做一个多行唯一索引,因为我需要检查所有列是否相同。也就是说,如果整行与我们要插入的行完全相同。
所以……除了每次尝试-插入-捕获时自动增加值会不断上升之外,它工作得很好。我不认为这是一个真正的问题,但浪费数字感觉很愚蠢.. :D