2

我以 OOP 方式使用 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/xxx/includes/_xxxClass.php 中的意外 T_THROW

while($stmt->fetch()){
    $data[]=$rslt or throw new Exception('Failed to fetch results', 1);
}

我正在寻找一种方法来查看获取结果是否存在错误,然后在我的 while 循环中抛出异常。

提前致谢!

4

2 回答 2

0

您正在执行的测试有缺陷。mysqli::fetch()失败时返回 false,因此您的 while 循环将在看到 false 时立即退出。如果没有返回结果,则循环不会执行并且 $data 将为空。

相反,您需要做的是测试在 while 循环之后是否填充了 $data,然后如果它为空则抛出异常:-

while($stmt->fetch()){
    $data[]=$rslt;
}
if(empty($data)) throw new Exception('Failed to fetch results', 1);

反思一下,您不应该仅仅因为没有返回结果就抛出异常,只需返回空数组:-

异常用于处理异常情况,空结果集并非异常。

于 2012-07-29T11:22:48.290 回答
0

考虑到$mysqli您的 mysqli 处理程序,您可以尝试:

if ($mysqli->errno) { // an error occurred, throw exception }
于 2012-07-29T11:22:51.553 回答