ThinkPHP 2053錯誤


這個報錯是調用存儲過程的時候產生的,用的是5.1的代碼是根據官方文檔寫的,我懷疑5.0也有這個問題。去官方查了一下發現不少人有這個問題,但是官方都沒有回應過,只能自己動手一步步調了。

 

$center = input('c',1);
$outParam = null;
$data = Db::query('call get_day(:in_param2)',[
'in_param2' => [&$center, \PDO::PARAM_INT],

]);

  注意這里的變量要用引用的方式

 

TP5.1 報錯 SQLSTATE[HY000]: General error: 2053

  

 

原因:

在 \thinkphp\library\think\db\Connection.php 里面有這么一個獲取存儲過程結果的函數

/**
     * 獲得存儲過程數據集
     * @access protected
     * @return array
     */
    protected function procedure()
    {
        $item = [];

        do {
            $result = $this->getResult();
            if ($result) {
                $item[] = $result;
            }
        } while ($this->PDOStatement->nextRowset());

        $this->numRows = count($item);

        return $item;
    }

  我打印出來

$this->getResult();

返回的結果集就是一個,但是這里又判斷循環是否下一行,我懷疑就是這里出錯了。把這里獲取結果集直接返回就可以了

/**
     * 獲得存儲過程數據集
     * @access protected
     * @return array
     */
    protected function procedure()
    {
        $result = $this->getResult();

        $this->numRows = count($result);

        return $result;
    }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM