Цикл
A while
не создает новую область, как вы можете видеть здесь: http://codepad.org/H1U3wXZD
Что касается самого кода, вот несколько предложений:
0) Я бы посоветовал иметь уровень абстракции базы данных ( PDO было бы достаточно хорошо).
1) Узнайте, как использовать JOIN
. Похоже, что вы можете получить всю необходимую информацию с помощью одного запроса, например:
SELECT p.id, p.proj, c.id, c.fname, c.title
FROM proj p
INNER JOIN pic c ON c.projid=p.id
WHERE catid='<your category>'
ORDER BY p.ordr, c.ordr
2) Вы должны отделить код, который получает данные из БД, от кода, который создает HTML (?). Возможно, вы могли бы поместить это в другой метод. Что-то вроде:
if ($cmd == 'catSelect') {
$data = getData($params['category']);
foreach ($data as $value) {
// process data here
}
}
3) Я так понимаю, вы используете сгенерированный JSON для отправки его через AJAX клиенту. В этом случае я бы полностью вырезал жир (например: сгенерированная разметка) и отправил только самые необходимые вещи (идентификатор изображения, заголовок, имя и все остальное, что необходимо) и сгенерировал бы код на стороне клиента. Это ускорит загрузку вашей страницы и сэкономит вам и вашим посетителям пропускную способность.