Мы используем 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();
}
Поэтому, если в таблице 3 нет данных. Хранимая процедура не вернет третий набор строк/результатов. Таким образом, в вышеприведенном цикле третий вызов $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();
}
Надеюсь, это поможет.