web-dev-qa-db-ja.com

Zend_Dbで複数の行を追加するにはどうすればよいですか?

私は多かれ少なかれこのように見える情報を持つ配列を持っています:

$data[] = array('content'=>'asd');
$data[] = array('content'=>'asdf');

そして、両方のエントリをデータベースに追加したいと思います。

$db->insert('table', $data);

両方のエントリを追加しません。私は何が間違っているのですか? Zend_ Db_Tableを使用する必要がありますか?

$data = array('content'=>'asdf');
$db->insert('table', $data);

もちろん動作します

22
Thomaschaaf

Zend_Db_Adapter_Abstract::query()メソッドを介して、複数行のINSERTステートメントを含む任意のSQL構文を実行できます。

ただし、Zend_Db_TableクラスとZend_Db_Table_Rowsetクラスのメソッドは、一度に複数の行を挿入することをサポートしていません。

19
Bill Karwin

複数の行を挿入するには、Zend_Dbを使用できます

$stmt = $table->getAdapter()->prepare('INSERT INTO tablename (col1, col2, col3) VALUES (?, ?, ?), (?, ?, ?)');

$stmt->execute( array($value1, $value2, $value3, $value4, $value5, $value6) );

(ビルカーウィンから)

あなたの場合、それをこのコードに変更することができます:

$data[] = array('content'=>'asd');
$data[] = array('content'=>'asdf');

$stmt = $table->getAdapter()->prepare('INSERT INTO table (col1) VALUES (?), (?)');
$stmt->execute( $data );

これらの '(?)、(?)'を動的に生成するには、データが動的である場合、次のスニペットを使用してみてください。

$values = implode(',',array_fill(0,count($data),'(?)'));

お役に立てれば

よろしく、リキ・リスナンダー

13
risnandar

これが私の解決策です:

public function saveRows($array) {
        $vAmount    = count($array);
        $values     = array();
        $columns    = array();

        foreach ($array as $colval) {
            foreach ($colval as $column=>$value) {
                array_Push($values,$value);
                !in_array($column,$columns) ? array_Push($columns,$column) : null;
            }
        }

        $cAmount    = count($columns);
        $values     = array_chunk($values, $cAmount);
        $iValues    = '';
        $iColumns   = implode("`, `", $columns);

        for($i=0; $i<$vAmount;$i++)
            $iValues.="('".implode("', '", $values[$i])."')".(($i+1)!=$vAmount ? ',' : null);

        $data="INSERT INTO `".$this->_name."` (`".$iColumns."`) VALUES ".$iValues;
        die($data);
        $this->query($data);
    }
3
ovnia

ZF2を使用する場合、解決策は次のようになります。

$insert = $this->getSql()->insert();
foreach ($values as $value) {
    $relation = array(
        'column_one' => $value,
        'column_two' => $value
    );
    $insert->values($relation, Insert::VALUES_MERGE);
}

$insertRes = $this->executeInsert($insert);
1

それは仕事です。

 $query = 'INSERT INTO ' . $db->quoteIdentifier('table') . ' (`col1`, `col2`) VALUES ';
    $queryVals = array();
    foreach ($data as $row) {
        foreach($row as &$col) {
            $col = $db->quote($col);
        }
        $queryVals[] = '(' . implode(',', $row) . ')';
    }
    $stmt = $db->query($query . implode(',', $queryVals));

zendフレームワークで複数の挿入クエリを構築する方法

1
Knase