[英]Call MySql Stored Procedure from PHP (PDO)
我正在嘗試使用 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 * ) 語句並嘗試使用上述所有“獲取”選項,但得到了相同的錯誤。
SP 需要 7 分鍾才能完成,但都立即出錯,所以我猜它從未運行過 SP。
我也試過如下
$result= $this->$db_adat->prepare("CALL pdv()");
$result->execute();
但我收到以下錯誤:
Object of class PDO could not be converted to string
我沒有在 SP 中傳遞任何參數,只是一個簡單的調用。 如果需要更多信息,請告訴我。
你的這部分代碼是錯誤的
$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';
}
<?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()
函數,因為沒有它下nextRowset()
記錄是“空的”。 來源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.