2013-03-02 8 views
0

Привет, У меня есть хранимая процедура. Также передаю параметры.Параметры хранимой процедуры Mysql Заказ

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

$stored_procedure_to_execute_with_parameters= 'Call '.$stored_procedure->name.'('.$parameter_argument_keys.')';  

, который переводит в

Call save_user(':in_user_name', :in_user_password, :in_user_first_name') and so on. 

Моя процедура в SQL в списке параметров in_user_password затем in_user_first_name затем in_user_name.

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

$results=array(); 

     if(!is_null($stored_procedure->getParameter()) && count($stored_procedure->getParameter()>0)) 
     { 
      $parameter_argument_keys= $this->parameterNamesOnly($stored_procedure->getParameter()); 
      $stored_procedure_to_execute_with_parameters= 'Call '.$stored_procedure->name.'('.$parameter_argument_keys.')';      

      try{ 
       $connection = Yii::app()->db; 
       $command = $connection->createCommand($stored_procedure_to_execute_with_parameters);     
       foreach ($stored_procedure->getParameter() as $parameter) 
       { 
        $command->bindValue(':'.$parameter->getName(),$parameter->getValue(),$parameter->getType()); 
       } 
       $dataReader = $command->query(); 
       $dataReader->setFetchMode(PDO::FETCH_ASSOC); 
       $results = $dataReader->readAll(); 
      } 
      catch(Exception $e){ 
       Yii::log('', CLogger::LEVEL_ERROR, $e->getMessage()); 
      } 
+0

Да, порядок params очень важен и должен быть таким же образом, как определено в SP. – Satya

+0

Вы не можете пройти по заказу, указанному вами при вызове хранимой процедуры, которая должна соответствовать точному порядку процедуры sql. –

+0

MySQL не нравится, когда вы передаете параметры не в порядке. – SparKot

ответ

0

Вам нужно передать параметры хранимой процедуры I правильный порядок. Sproc не имеет возможности узнать, какой параметр является тем, что я тогда заказываю.

+0

ok, поэтому передавать аргументы, такие как не имеет эффекта. Вызов save_user (': in_user_name',: in_user_password,: in_user_first_name ') и т. Д. –

+0

Вы, кажется, путаете подготовленные заявления PDO с хранимыми процедурами. Заполнители, такие как ': in_user_name', являются частью синтаксиса PDO, а не MySQL. – Barmar

+0

Я думал, что инструкция pdo будет отображать имя параметра в параметр в sql –

Смежные вопросы