2014-07-16 80 views
0

我正在嘗試使用PDO連接執行MySQL存儲過程,我嘗試了幾乎所有內容,但無法執行它。從PHP調用MySql存儲過程(PDO)

SP只會插入和更新。以下是我嘗試到現在的代碼。

$config = require('protected/config/main.php'); 
try 
{ 
$db_adat = new PDO($config['components']['db']['connectionString'], $config['components'] ['db']['username'], $config['components']['db']['password']); 
$result= $db_adat->prepare('CALL pdv()'); 

$a = $result->execute(); 
$a->fetchAll(PDO::FETCH_ASSOC); 

我試過只取(),只有使用fetchall(),fetchObject(),以獲取(PDO :: FETCH_ASSOC),與使用fetchall(\ PDO :: FETCH_ASSOC),但我總是得到以下錯誤

Fatal error: Call to a member function fetchAll() on a non-object in D:\ADAT_System\www\test\protected\controllers\ExportPDVController.php on line 35 

我也嘗試使用query()而不是execute(),但這也不起作用。

我也嘗試在SP中添加(select *)語句並嘗試使用上面的所有「獲取」選項,但得到相同的錯誤。

SP需要7分鐘才能完成,但都立即發生錯誤,所以我猜測它永遠不會運行SP。

我試過如下太

$result= $this->$db_adat->prepare("CALL pdv()"); 
$result->execute(); 

,但我得到了以下錯誤:

Object of class PDO could not be converted to string 

我不傳遞任何參數,SP,只是一個簡單的電話。請讓我知道是否需要更多信息。

回答

0

你的這部分代碼是錯誤的

$result= $db_adat->prepare('CALL pdv()'); 
$a = $result->execute(); 
$a->fetchAll(PDO::FETCH_ASSOC); 

因爲​​返回時的成功或失敗的布爾。

你不能用它來fetch.here與相應的變量名的正確方法:

$stmt= $db_adat->prepare('CALL pdv()'); 
$success = $stmt->execute(); 
if($success){ 
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
}else{ 
    echo 'failed to run sp'; 
}