簡體   English   中英

從 PHP (PDO) 調用 MySql 存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM