2014-07-16 73 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'; 
}