我有两个表Accommodation
和Facility
,它们与第三个表Accommodation_facility
以多对多关系连接。
使用Yii,如何将多个数据记录插入Accomodation_facility
表?
答案 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));
答案 4 :(得分:-2)
由于您的问题标记为“yii”,我猜您使用的是Yii Framework。在文档 - http://www.yiiframework.com/doc/guide/1.1/en/database.ar
上查看Active Records按照文档为您的表设置AR类,并简单地循环您提交复选框列表时发布的数据。在此循环中,您可以为要为其插入数据的表创建,填充和保存AR对象。