我以面向对象的方式使用mysqli准备的语句。一切都按预期进行,但我似乎找不到任何关于如何在while循环中检测并抛出异常的文档。这就是我的代码目前的状况,它工作得很完美。
$rslt=array();
$data=array();
$stmt->bind_result($rslt['col1'], $rslt['col2'], $rslt['col3'], $rslt['col4']);
while($stmt->fetch()){
$data[]=$rslt;
}
然而,它不包含抛出异常的方法。这就是我在类似的脚本中抛出异常的方式,该脚本的结果限制为1(因此,在本例中我不需要循环遍历它们)。
$rslt=array();
$data=array();
$stmt->bind_result($rslt['col1'], $rslt['col2'], $rslt['col3'], $rslt['col4']);
if(!$stmt->fetch()){
throw new Exception('Failed to fetch results', 1);
}
$data[]=$rslt;
我几乎在尝试做下面代码中的内容,但它抛出了以下错误:-
"分析错误:语法错误,在第95行的xxx/xx/includes/_xxxClass.php中出现意外的T_THROW
while($stmt->fetch()){
$data[]=$rslt or throw new Exception('Failed to fetch results', 1);
}
我正在寻找的是一种方法,可以查看获取结果时是否存在错误,然后在while循环中抛出异常。
提前感谢!
您正在执行的测试有缺陷。mysqli::fetch()
在失败时返回false,所以while循环一看到false就会退出。如果没有返回结果,那么循环将不会执行,$data将为空。
相反,您需要做的是测试$data是否在while循环后填充,然后在它为空时抛出异常:-
while($stmt->fetch()){
$data[]=$rslt;
}
if(empty($data)) throw new Exception('Failed to fetch results', 1);
经过反思,您不应该仅仅因为没有返回结果而抛出异常,只需返回空数组:-
异常用于处理异常情况,空的结果集也不例外。
考虑到$mysqli
您的mysqli处理程序,您可以尝试使用:
if ($mysqli->errno) { // an error occurred, throw exception }