21 ошибка программиста PHP. Часть 2 - Получение рядов данных: правила эффективной работы

ОГЛАВЛЕНИЕ

Получение рядов данных: правила эффективной работы

Вторая проблема нашего кода - это использование функции sql_fetch_row() для получения рядов. Как результат своей работы эта функция возвращает лишь пронумерованный массив. Однако существует ещё и функция sql_fetch_array(), которая возвращает два массива: пронумерованный и ассоциативный:

<?php
$row
= sql_fetch_array ($result);
print
$row[1]; // Второй столбец
print $row[name]; // Столбец name - имя
?>

Примечание: Существуют разные точки зрения на целесообразность использования одинарных кавычек при вставке строковых аргументов. В приведённом примере (столбец name) и далее по статье они не используются.

Какая из функций более удобна для разработчика? Ассоциативные массивы позволяют редактору кода ясно и однозначно понять, какая именно выборка из БД будет осуществляться в каждом конкретном случае. Например:

<?php
if (sql_num_rows ($result) <= 0) {
    print
"Ошибка: не найдено ни одного ряда";
    exit;
}

while (
$row = sql_fetch_array ($result)) {
print
"$row[name]: $row[phone_number]\n<br>\n";
}
?>

Применение sql_fetch_row($result)

Итак, функция sql_fetch_row() имеет целую тонну недостатков. Однако, существует ситуация, где её можно поставить без всякого ущерба "прозрачности" кода: когда sql-запрос формируется пользователем.

До настоящего момента мы рассматривали примеры с заранее известными запросами и определёнными разработчиком. Но иногда возникает необходимость в запросе, сформированном самим пользователем. В таких случаях разработчику неизвестно количество столбцов в выборке.

Здесь для их эффективной обработки полезно использовать функцию sql_fetch_row() в сочетании с count():

<?php
for ($i = 0; $i < count($row); $i++){
    print
"Столбец". ($i + 1). $row[$i]. "\n<BR>\n";
}
?>