我正在尝试使用PDO连接执行MySQL存储过程,我几乎尝试了所有但不能执行它。
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);
我只尝试了fetch(),只有fetchAll(),fetchObject(),带有fetch(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 *)语句并尝试上面的所有内容" fetch"选项,但得到同样的错误。
SP需要7分钟才能完成,但是所有人都立即犯了错误,因此我猜测它从未运行过SP。
我也试过以下
$result= $this->$db_adat->prepare("CALL pdv()");
$result->execute();
但我得到了以下错误:
Object of class PDO could not be converted to string
我没有在SP中传递任何参数,只是一个简单的调用。如果需要更多信息,请告诉我。
答案 0 :(得分:0)
这部分代码错误
$result= $db_adat->prepare('CALL pdv()');
$a = $result->execute();
$a->fetchAll(PDO::FETCH_ASSOC);
因为execute()
在成功或失败时返回布尔值。
你不能用它来获取。适当的变量名是正确的方法:
$stmt= $db_adat->prepare('CALL pdv()');
$success = $stmt->execute();
if($success){
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
}else{
echo 'failed to run sp';
}
答案 1 :(得分:0)
<?php
if(isset($_POST) && !empty($_POST)){
$SearchPO = (($_POST)['SearchPO']);
}
$stmt = $pdo->prepare("CALL spPO(?)");
$stmt->bindParam(1, $SearchPO, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT|PDO::ATTR_EMULATE_PREPARES, 4000);
$stmt->execute();
do {
$result = $stmt->fetchAll();
} while ($stmt->nextRowset() && $stmt->columnCount());
?>
您必须使用 nextRowset()
函数,因为没有它,下一条记录是“空的”。 Source