1

Zend フレームワークを使用しており、mysql データベースにデータを挿入したいと考えています。データベースに既に存在する行に遭遇すると、プログラムはエラーをスローします。重複データを単純に無視して次の行に進む方法。Zend フレームワークに挿入無視などの方法はありますか? この質問に対する正確な答えがウェブで見つかりませんでした

ありがとう

4

2 に答える 2

1

次のように、挿入を Try/Catch ブロックにラップすることをお勧めします。

try {
   $db->insert(array());
} catch (Zend_Db_Exception $e) {
  // ignored 
}

「その他の」エラーを取得するために新しい例外をスローしない場合は、一意の違反のために例外がスローされたかどうかを確認することをお勧めします。

他のソリューション「最初にデータベースをクエストする必要があるため、高価です」

$validator = new Zend_Validate_Db_NoRecordExists(
    array(
        'table' => 'database_table',
        'field' => 'your_field_to_check_for_unique'
    )
);

if ($validator->isValid('your_field_to_check_for_unique) {
         // DO Insert
} 
于 2012-11-01T13:51:41.810 に答える
0

「生の」クエリを使用することができます。
これは、すでに作成されたレコードをスキップして特定の値を更新する方法の例です。

$query = 'INSERT IGNORE INTO table_name (col1, col2, col3)  VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE col3 = VALUES(col3)';
$dbAdapter->query($query);
于 2016-09-20T09:57:35.437 に答える