2013-03-02 113 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