Несколько операторов SQL в Yii

Я пытаюсь выполнить несколько операторов sql в yii, чтобы уменьшить количество обращений к серверу. Это для области, называемой нишевой специализацией. Пользователю разрешено ввести не более трех записей, однако это поле является необязательным. Это код:

$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 сформирован правильно, объект $ имеет правильные данные из формы, в привязке $str работает нормально. Однако я столкнулся со следующей проблемой: 1) Если в массиве специализации ниши ($object->nspecial) есть только одна запись, запись работает нормально. 2) Однако, если заполнено более одного поля, вставка не может быть выполнена, потому что поля userid и nspecial образуют составной первичный ключ.

Разве составной первичный ключ не зависит от обоих значений, образующих уникальную комбинацию (при условии, что пользователь вводит уникальные значения в различные поля)? Если я удалю ограничение первичного ключа, оно просто дублирует значение одного поля с двумя строками в базе данных. Что я здесь делаю неправильно?


person Varun Jain    schedule 15.10.2012    source источник


Ответы (1)


Нашел баг. Для циклов foreach я должен привязываться по значению, а не по параметру, поскольку он ссылается на самое последнее значение параметра, таким образом, дублируя значения.

person Varun Jain    schedule 15.10.2012