【发布时间】:2018-11-04 10:22:35
【问题描述】:
我们正在使用 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); 的第三次调用将失败,从而导致一般错误。
有什么办法可以解决这个问题吗?
【问题讨论】:
-
每个查询是否依赖于前一个查询中的某些内容?涉及的每个表都有哪些字段,最后需要什么结果?
-
是的,每个查询都依赖于前一个。第 3 表是第 2 表的子表,第 2 表是第 1 表的子表。但是子表可能有也可能没有它依赖的数据。但是,如果第 3 个表中有条目,那么 table2 中肯定会有相应的条目。表 2 中的数据也是如此。我们只是想确保 table3 中没有数据,要么 mysql 应该返回一个带有标题的空表,要么 PHP 应该优雅地处理它
-
“如果表中没有数据,存储过程什么也不返回。” 那不应该是真的。我有使用存储过程返回多个结果集的代码,它们的序号位置很重要。空结果集与列标题一起返回。
标签: php mysql stored-procedures pdo magento-1.9