這個報錯是調用存儲過程的時候產生的,用的是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;
}
