私は多かれ少なかれこのように見える情報を持つ配列を持っています:
$data[] = array('content'=>'asd');
$data[] = array('content'=>'asdf');
そして、両方のエントリをデータベースに追加したいと思います。
$db->insert('table', $data);
両方のエントリを追加しません。私は何が間違っているのですか? Zend_ Db_Tableを使用する必要がありますか?
$data = array('content'=>'asdf');
$db->insert('table', $data);
もちろん動作します
Zend_Db_Adapter_Abstract::query()
メソッドを介して、複数行のINSERT
ステートメントを含む任意のSQL構文を実行できます。
ただし、Zend_Db_Table
クラスとZend_Db_Table_Rowset
クラスのメソッドは、一度に複数の行を挿入することをサポートしていません。
複数の行を挿入するには、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),'(?)'));
お役に立てれば
よろしく、リキ・リスナンダー
これが私の解決策です:
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);
}
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);
それは仕事です。
$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));