我有一个存储过程,用于从数据库中提取结果集。根据参数,它可能返回0条记录(这是正常的)。我唯一的问题是,在它返回0记录的实例中,PHP抛出异常。这是我的代码;
public function MyMethod($strParam)
{
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$strSQL = "spStoredProc(?)";
$objStatement = $this->objDB->prepare($strSQL);
$objStatement->bind_param("s",$strParam);
$objStatement->execute();
$objResult = $objStatement->get_result();
if (!$objResult)
{
throw new Exception("Database Error [{$this->objDB->errno}] {$this->objDB->error}"); //<<thrown
}
$objReturn = array();
while($objRow = $objResult->fetch_assoc())
{
$objReturn[] = $objRow;
}
return $objReturn;
}
抛出的异常是;
Uncaught Exception: Database Error [0] in /var/www/bla/dbClass.php:56\nStack trace:\n#0 /var/www/bla/main.php(19): dbClass->MyMethod('stuff')\n#1 {main}\n thrown in /var/www/bla/dbClass.php on line 56
存储过程创建代码
CREATE DEFINER=`root`@`%` PROCEDURE `spStoredProc`(IN `strParam` VARCHAR(50))
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
BEGIN
//bunch of code
END
所以当我跑;
var_dump($myDBObj->MyMethod("ShouldReturnZeroRows")) //exception
var_dump($myDBObj->MyMethod("ShouldReturnTenRows")) //works great!
我是否有些东西误解了存储过程会导致预处理语句失败并且没有返回结果?
服务器是运行PHP版本7.0.8,MySQL 5.7.16的Ubuntu。