Продолжим работу с данными, отобранными из таблицы students. Пока этот результат хранится в переменной $result.
Код страницы index.php имеет вид:
<?php
//устанавливаем доступы к базе данных:
//переменная $host - имя хоста, на локальном компьютере (в нашем случае, это localhost)
$host = 'localhost';
//переменная $user – имя пользователя, по умолчанию это root
$user = 'root';
//переменная $password – пароль, он по умолчанию пустой
$password = '';
//$db_name – имя базы данных
$db_name = 'test';
//создаем соединение, используя наши доступы:
mysql_connect($host, $user, $password);
//выбираем базу данных
mysql_select_db($db_name);
//устанавливаем кодировку (не обязательно)
mysql_query("SET NAMES ' cp1251'");
//задаем имя таблицы в переменной $table
$table = 'students';
//отбираем все записи из таблицы students
$query = "SELECT * FROM ". $table;
//выполняем запрос
$result = mysql_query($query);
?>
После того, как сделали запрос к базе, в переменной $result будет лежать результат этого действия. Однако лежит он не в той форме, которая нам нужна в PHP, а в той форме, в которой его прислала нам база.
Достать результат в нормальном виде (в виде массиве) можно с помощью функции mysqli_fetch_assoc. Функция mysqli_fetch_assoc считывает одну строку результата, который прислала база данных.
Чтобы отобразить все строки из переменной $result используем цикл while.
После команды $result = mysql_query($query) добавляем следующий код:
//Преобразуем то, что отдала база в массив PHP с именем $row
//пока происходит считывание строк из $result
while($row = mysqli_fetch_assoc($result))
{
//выводим данные из массива $row:
echo $row['fam']." со стипендией ". $row['stip']." руб <br>";
}
?>
Итоги:
1) в цикле while считываем построчно результат из базы данных;
2) когда цикл дойдет до последней строки функция mysqli_fetch_assoc вернет false и цикл while закончит свою работу;
3) массив $row имеет поля такие же, как и база данных students, и обращение к ним осуществляется так: $row['id'], $row['fam'], $row['age'], $row['stip'].
Чтобы данные из базы были выведены в табличном виде, теги создания таблицы, строк и ячеек напечатаем с помощью команды echo. Изменим вышеприведенный код:
//Делаем запрос к БД, результат запроса храним в $result:
$result = mysql_query($query);
//Печатаем тег начала таблицы
echo '<table align="center" border="1">';
//Создаем шапку таблицы
//Начинаем первую строку
echo '<tr>';
//Создаем первую ячейку первого столбца
echo '<th>Номер</th>';
//Создаем первую ячейку второго столбца
echo '<th>Фамилия</th>';
//Создаем первую ячейку третьего столбца
echo '<th>Возраст</th>';
//Создаем первую ячейку четвертого столбца
echo '<th>Стипендия</th>';
//Завершаем первую строку
echo '</tr>';
// Делаем обход массива и вывод данных из таблицы students
while($row = mysql_fetch_assoc($result))
{
//печатаем очередную строку таблицы с данными
echo '<tr align="center">';
echo '<td>'.$row['id'].'</td>';
echo '<td>'.$row['fam'].'</td>';
echo '<td>'.$row['age'].'</td>';
echo '<td>'.$row['stip'].'</td>';
echo '</tr>';
}
//закрываем тег создания таблицы
echo '</table>';
?>
Обновите страницу index.php и просмотрите результат – это должна быть таблица:
Обработка команд SQL в PHP
Команда SELECT
Команда SELECT позволяет отобрать несколько строк из таблицы. Ее синтаксис следующий:
SELECT * FROM имя_таблицы WHERE условие_отбора; Примеры использования команды SELECT рассмотрим ниже.
Выберем из нашей тестовой таблицы students студента с id равным 2:
<?php //В $result будет находиться одна строка с данными на Белова: $query = "SELECT * FROM students WHERE id=2"; $result = mysql_query($query);?>Выберем из нашей таблицы students студентов с id больше 2:
<?php //В $result будут все студенты, кроме первого и второго: $query = "SELECT * FROM students WHERE id>2"; $result = mysql_query($query);?>
Выберем из нашей таблицы students студентов с id больше 2 включительно:
<?php //В $result будут все студенты, кроме первого: $query = "SELECT * FROM students WHERE id>=2"; $result = mysql_query($query);?>
Выберем из нашей таблицы students студентов с id, не равным 2:
<?php //В $result будут все студенты кроме Белова (потому что у него id равен 2): $query = "SELECT * FROM students WHERE id!= 2"; $result = mysql_query($query);?>
Выберем из нашей таблицы students студентов возрастом 16 лет:
<?php //В $result будут Антонов и Ветров: $query = "SELECT * FROM students WHERE age=16"; $result = mysql_query($query);?>
Выберем из нашей таблицы students студентов со стипендией 1400:
<?php //В $result будут Донцов, Калинин: $query = "SELECT * FROM students WHERE stip=1400"; $result = mysql_query($query);?>
Выберем из нашей таблицы students студента с фамилией Егоров:
<?php //В $result будет только Егоров: $query = "SELECT * FROM students WHERE fam='Егоров' "; $result = mysql_query($query); /* Обратите внимание на кавычки: поскольку вся строка запроса у нас лежит в двойных кавычках, то строку 'Егоров' мы возьмем в одинарные! */?>Группировки условий
Если вам нужны сложные комбинации команд OR и AND то, так же, как в if, их можно группировать с помощью круглых скобок (), чтобы показать приоритет условий.
Давайте выберем всех студентов в возрасте от 16 лет до 18 лет (включительно) или со стипендией не менее 1400 руб (обратите внимание на расстановку скобок () - именно они группируют условия):
SELECT * FROM students WHERE (age>=16 AND age<=18) OR (stip>=1400)
Выбор столбцов
В результат, который вернет нам база данных, не обязательно включать все столбцы.
Пусть необходимо узнать только фамилия и возраст студента, не вытягивая из базы данных всю остальную информацию:
<?php /* В $result будут только поля fam и age и не будет id, stip (звездочка *, которую мы ставили раньше, указывает вернуть ВСЕ столбцы): */ $query = "SELECT fam, age FROM students"; $result = mysql_query($query);?>
Кроме того, можно выполнить частичное совпадение строки с помощью % в ключевых словах. Ниже будут показаны все студенты, фамилия которых начинается с “Ант”.
SELECT * FROM students WHERE fam LIKE ' Ант% ';
Ниже будут показаны все студенты, фамилия которых заканчивается на “ов”.
SELECT * FROM students WHERE fam LIKE ' %ов ';
Вы также можете дать % в обоих направлениях. В этом случае, будет поиск для данного ключевого слова в любом месте строки. Ниже будут показаны все студенты, которые содержат “н” внутри их фамилии.
SELECT * FROM students WHERE fam LIKE '%н%';Давайте выберем те записи, у которых возраст начинается с цифры 2, а затем идет еще один символ:
SELECT * FROM students WHERE age LIKE '2_'