php - Mysql 存储过程 - 如果未找到数据,则返回表头
问题描述
我们正在使用 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();
}
希望这会有所帮助。
推荐阅读
- kendo-ui - 网格更新数据源中的 Kendo ui 多选
- python - 从字典列表创建字典
- ruby-on-rails - Turbolinks 5 和 setInterval 问题
- android - “应用内购买”中的“SkuType.INAPP”和“SkuType.SUBS”有什么区别
- python - Spark DataFrameWriter 使用 TIMESTAMP 而不是 DATETIME
- json - Micronaut 无法转换 CompletableFuture
>? - windows - SCardEstablishContext 在 Windows 10 Home 上返回 1753 (EPT_S_NOT_REGISTERED)
- typescript - 用于方法数组参数传播的打字稿打字
- javascript - 在 Javascript 中使用 reduce() 打印两个或多个匹配项
- c# - 如何找到所有门都出现空异常?