如何同时在表中插入多条记录?

时间:2011-08-13 02:23:08

标签: php sql yii

我有两个表AccommodationFacility,它们与第三个表Accommodation_facility以多对多关系连接。

  • 住宿( accommodation_id ,住宿类型,姓名)
  • 工具( facility_id ,facility_name)
  • Accommodation_facility( accommodation_id facility_id

使用Yii,如何将多个数据记录插入Accomodation_facility表?

5 个答案:

答案 0 :(得分:11)

使用循环插入非常慢。我们假设您要插入5000行,这将花费大约6分钟(每条记录单独插入)。使用单个查询插入数据会更好:

$values = '(null, "your string"), (null, "next string"), (null, "third string")';
$sql = 'INSERT INTO table_data (id, data) VALUES ' . $values;
$command = Yii::app()->db->createCommand($sql);
$command->execute();

这将花费1/10的时间。

答案 1 :(得分:2)

您最好使用bindParam来防止SQL注入。我不知道这是否是最好的方法,但我有这样做的方式:

$values = array(array(1,2),array(3,4),array(5,6),);
$nbValues = count($values);
$sql = 'INSERT INTO table_name (col_name1, col_name2) VALUES ';
for ($i=0; $i < $nbValues; $i++) { 
    $sql .= '(:col1_'.$i.', :col2_'.$i.')';
    if ($i !== ($nbValues-1))
        $sql .= ',';
}
$command = Yii::app()->db->createCommand($sql);
for ($i=0; $i < $nbValues; $i++) { 
    $command->bindParam(':col1_'.$i, $values[$i][0], PDO::PARAM_INT);
    $command->bindParam(':col2_'.$i, $values[$i][1], PDO::PARAM_INT);
}
$command->execute();

希望这有帮助!

答案 2 :(得分:0)

foreach($facilities as $facility)
{ 
    $model = new Model;
    $model->attributes = $facility // or $model->column = $facility
    if ($model->validate())
        $model->save() 
}

答案 3 :(得分:0)

startActivity(new Intent(MainActivity.this, PopNoInternetActivity.class));

blog post

答案 4 :(得分:-2)

由于您的问题标记为“yii”,我猜您使用的是Yii Framework。在文档 - http://www.yiiframework.com/doc/guide/1.1/en/database.ar

上查看Active Records

按照文档为您的表设置AR类,并简单地循环您提交复选框列表时发布的数据。在此循环中,您可以为要为其插入数据的表创建,填充和保存AR对象。