в sqlqry.php
function procat(){
require_once("..\db.php");
$procat = $DBH->prepare("SELECT pro_sr FROM products LEFT JOIN
categories ON products.pro_cat=categories.cat_sr");
$procat->execute();
while($rowprocat[]=$procat->fetch()) {}
return $rowprocat;
}
в products.php
<?php
$rowprocat=procat();
print_r($rowprocat);
?>
Array ( [0] => Array ( [pro_sr] => 60 [0] => 60 ) [1] => Array ( [pro_sr] => 61 [0] => 61 ) [2] => Array ( [pro_sr] => 62 [0] => 62 ) [3] => )
почему он показывает 4 строки, тогда как на самом деле он имеет 3 записи. также проверяется в phpMyAdmin показывает 3. 4-я строка пуста.
Поскольку вы назначаете возвращаемое значение $procat->fetch()
в массив, независимо от того, был ли результат или нет.
Вот почему большинство людей используют временную переменную в этом случае в PHP:
function procat(){
require_once("..\db.php");
$procat = $DBH->prepare("SELECT pro_sr FROM products LEFT JOIN
categories ON products.pro_cat=categories.cat_sr");
$procat->execute();
while($row = $procat->fetch()) {
$rowprocat[] = $row;
}
return $rowprocat;
}
fetchAll
загрузит все это сразу в память, в то время как fetch
загружает только одну строку результата за вызов. Таким образом, правильное использование fetch
обычно приводит к более быстрым и легким сценариям.