我们正在使用 magento 和 PHP。并有一个存储过程进行一些处理,最后假设使用选择查询返回多个结果集。
Eg : Select * FROM table1;
Select * FROM table2;
Select * FROM table3;
问题是,并非所有表都可能包含数据。如果表中没有数据,存储过程将不返回任何内容。在 PHP 中,我们使用 for 循环来获取数据。
for($i= 0; $i<=3; $i++){
$rowset = $sql->fetchAll(PDO::FETCH_ASSOC);
if ($rowset) {
switch ($i) {
case 0:
$spStatus = $rowset;
break;
case 1:
$boqSections = $rowset;
break;
case 2:
$boqEntries = $rowset;
break;
case 3:
$boqItems = $rowset;
break;
}
}
$sql->nextRowset();
}
那么如果table3中没有找到数据。存储过程不会返回第三个行集/结果集。因此,在上面的循环中,对 $sql->fetchAll(PDO::FETCH_ASSOC);
的第三次调用将失败,导致一般错误。
有什么办法可以解决这个问题吗?
最佳答案
为 rowCount 添加以下条件
for($i= 0; $i<=3; $i++){
$rowset = $sql->fetchAll(PDO::FETCH_ASSOC);
if ($rowset && $sql->rowCount() >0) {
switch ($i) {
case 0:
$spStatus = $rowset;
break;
case 1:
$boqSections = $rowset;
break;
case 2:
$boqEntries = $rowset;
break;
case 3:
$boqItems = $rowset;
break;
}
} else {
$spStatus = [];
$boqSections = [];
$boqEntries = [];
$boqItems = [];
}
$sql->nextRowset();
}
希望这会有所帮助。
关于php - Mysql 存储过程 - 如果未找到数据则返回表头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50522068/