2013-03-02 114 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 2013-03-02 11:51:40

+0

您无法通过您在存储过程的调用中指定的顺序传入它需要与SQL过程的顺序完全匹配 – 2013-03-02 11:56:47

+0

当您按顺序传递参数时,MySQL不喜欢。 – SparKot 2013-03-02 11:58:41

回答

0

你需要通过存储过程我正确的顺序的参数相匹配的对象插入。 sproc无法知道哪个参数是我的订单。

+0

ok,因此传递参数如无效调用save_user(':in_user_name',:in_user_password,:in_user_first_name')等等。 – 2013-03-02 11:58:53

+0

您似乎将PDO准备的语句与存储过程混淆在一起。像':in_user_name'这样的占位符是PDO语法的一部分,而不是MySQL。 – Barmar 2013-03-02 12:05:31

+0

我以为pdo语句会将参数名称映射到SQL中的参数 – 2013-03-02 12:07:16