yiiで複数のSQLステートメントを実行しようとしています。これはサーバーへのラウンドトリップを減らすためです。これは、ニッチスペシャライゼーションと呼ばれる分野向けです。ユーザーには最大3つの入力が許可されますが、フィールドはオプションです。これはコードです:
$sql = " Delete from cur_niche
where userid =:id ; " ;
$var2 = array_filter($object->nspecial) ;
if(!empty($var2))
{ $str = "" ;
$i = 0 ;
foreach($var2 as $n)
{ if($i==0)
$str.= "(:id,:n".$i.")" ;
else
$str.= ", (:id,:n".$i.")" ;
$i++ ;
}
$sql .= "Insert into cur_niche (userid,nspecial) Values ".$str." ; " ;
}
$command = Yii::app()->db->createCommand($sql) ;
$command->bindParam(":id",$id,PDO::PARAM_STR) ;
if(!empty($var2))
{ $i = 0 ;
foreach($var2 as $n)
{
$str = ":n".$i ;
$command->bindParam($str,$n,PDO::PARAM_STR) ;
$i++ ;
}
}
$result = $command->execute() && $result ;
私はすべての変数をダンプしようとしました、sqlステートメントは正しく形成されています、$ objectはフォームからの正しいデータを持っています、バインディングでは$strは正常に機能しています。ただし、次の問題に直面しています。1)ニッチな特殊化配列($ object-> nspecial)にエントリが1つしかない場合、エントリは正常に機能しています。2)ただし、複数のフィールドに入力すると、挿入の実行に失敗します。これは、useridフィールドとnspecialフィールドが複合主キーを形成するためです。
複合主キーは、一意の組み合わせを形成する両方の値に依存しませんか(ユーザーがさまざまなフィールドに一意の値を入力すると仮定します)?主キー制約を削除すると、データベース内の2つの行を持つ1つのフィールドの値が複製されます。ここで何が間違っているのでしょうか。