SQL - запросы и их обработка с помощью PHP
В данной статье мы рассмотрим способы обращения к таблицам баз данный MySQL с помощью языка запросов SQL. SQL - это аббревиатура, которая так и "раскрывается" - структуризированный язык запросов.
В языке PHP для это цели существует целый ряд функций с префиксом "mysql". Нам для рассмотрения запросов понадобится не так много из них. Функция, без которой в языке PHP выполнение SQL-запросов было бы просто невозможным:
В языке PHP для это цели существует целый ряд функций с префиксом "mysql". Нам для рассмотрения запросов понадобится не так много из них. Функция, без которой в языке PHP выполнение SQL-запросов было бы просто невозможным:
resource mysql_query(запрос)
Данная функция посылает запрос к базе данных и возвращает в случае успешного обращения идентификатор ресурса.
Для того чтобы подключиться к базе данных MySQL необходимо выполнить следующую последовательность:
Для того чтобы подключиться к базе данных MySQL необходимо выполнить следующую последовательность:
$host='localhost'; // имя хоста (уточняется у провайдера) $database='db_name'; // имя базы данных, которую вы должны создать $user='user_name'; // заданное вами имя пользователя, либо определенное провайдером $pswd='your_pass'; // заданный вами пароль $dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL."); mysql_select_db($database) or die("Не могу подключиться к базе.");
Итак mysql_connect() - функция для подключения к серверу MySQL на Вашем хостинге.
А mysql_select_db() выбирает базу данных на сервере для подключения.
Иными словами подключаемся к серверу, выбираем базу и начинаем работать.
Функция die() вызывается в случае ошибки и выводит в окно браузера сообщение, которое вы указали.
Для завершения работы с базами данных используется функция:
А mysql_select_db() выбирает базу данных на сервере для подключения.
Иными словами подключаемся к серверу, выбираем базу и начинаем работать.
Функция die() вызывается в случае ошибки и выводит в окно браузера сообщение, которое вы указали.
Для завершения работы с базами данных используется функция:
mysql_close($dbh);
Здесь $dbh - дескриптор, которые при соединении возвратила функция mysql_connect.
Закончив стартовый обзор, начнем рассмотрение собственно SQL-запросов.
Для этого прежде всего вам необходимо создать базу данных с определенном именем. А в ней создать таблицу, тоже с конкретным именем. В наших примерах будем обращаться к таблице my_sql_table. Чтобы создать эту таблицу давайте выполним в phpmyadmin нашего localhost следующий запрос:
Закончив стартовый обзор, начнем рассмотрение собственно SQL-запросов.
Для этого прежде всего вам необходимо создать базу данных с определенном именем. А в ней создать таблицу, тоже с конкретным именем. В наших примерах будем обращаться к таблице my_sql_table. Чтобы создать эту таблицу давайте выполним в phpmyadmin нашего localhost следующий запрос:
CREATE TABLE `my_sql_table` ( `id` INT NOT NULL , // идентификатор будущих записей таблицы `firstname` VARCHAR( 50 ) NOT NULL , // текстовое поле VARCHAR `surname` VARCHAR( 50 ) NOT NULL , // max длиной 50 символов PRIMARY KEY ( `id` ) // первичный ключ - идентификатор id );
Итак таблица создана. Выполним первый запрос, который сразу оформим в виде PHP-кода:
<?php // Файл firstsql.php $host='localhost'; // имя хоста (уточняется у провайдера) $database='db_name'; // имя базы данных, которую вы должны создать $user='user_name'; // заданное вами имя пользователя, либо определенное провайдером $pswd='your_pass'; // заданный вами пароль $dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL."); mysql_select_db($database) or die("Не могу подключиться к базе."); $query = "SELECT * FROM `my_sql_table`"; $res = mysql_query($query); while($row = mysql_fetch_array($res)) { echo "Номер: ".$row['id']."<br>\n"; echo "Имя: ".$row['firstname']."<br>\n"; echo "Фамилия: ".$row['surname']."<br><hr>\n"; } ?>
Разберем PHP-код файла firstsql.php. Начнем с собственно запроса к таблицам базы данных (БД).
$query = "SELECT * FROM `my_sql_table`";
Данный запрос можно расшифровать так: выбрать из таблицы my_sql_table БД все записи из всех полей. Таким образом знак * после слова SELECT означает "выбрать абсолютно все". Итак, запрос сформирован. Теперь его надо выполнить:
$res = mysql_query($query);
В случае успешного выполнения запроса функция mysql_query() вернет нам идентификатор ресурса $res.
Его мы должны передать в качестве параметра в функцию mysql_fetch_array(). Название этой функции говорит само за себя. Т.е. она формирует и выдает массив по выборке из таблицы БД. В случае нашей таблицы массив будет состоять из числа элементов, равных количествам записей (строк) в таблице и содержать значения id, firstname, surname для каждой строки таблицы. Следовательно, следующий код:
Его мы должны передать в качестве параметра в функцию mysql_fetch_array(). Название этой функции говорит само за себя. Т.е. она формирует и выдает массив по выборке из таблицы БД. В случае нашей таблицы массив будет состоять из числа элементов, равных количествам записей (строк) в таблице и содержать значения id, firstname, surname для каждой строки таблицы. Следовательно, следующий код:
while($row = mysql_fetch_array($res)) { echo "Номер: ".$row['id']."<br>\n"; echo "Имя:".$row['firstname']."<br>\n"; echo "Фамилия:".$row['surname']."<br><hr>\n"; }
можно прокомментировать так: пока введенная нами переменная $row получает не нулевые результаты работы функции mysql_fetch_row следует выдать в броузер значение полей $row['id'], $row['firstname'], $row['surname'] с помощью echo.
Если запрос выполнить так:
Если запрос выполнить так:
$query = "SELECT firstname FROM `my_sql_table`";
то это будет означать, что из всех строк выбирается только значения поля firstname.
Следовательно предыдущий код следует переписать как:
Следовательно предыдущий код следует переписать как:
$res = mysql_query($query); while($row = mysql_fetch_array($res)) { echo "Имя:".$row['firstname']."<br>\n"; }
Если Вы хотите выбрать строки таблицы с конкретным значением id где фамилия (surname) будет Петров, то запрос перепишется следующим образом:
$query = "SELECT id FROM `my_sql_table` where surname='Петров'";
А вот если потребуется узнать фамилию того, кто находится под номером, к примеру, 5, то запрос будет таким:
$query = "SELECT surname FROM `my_sql_table` where id=5";
В этом случае Вы знаете, что результатом запроса будет всего одна строка из таблицы. Т.е. нет смысла организовывать цикл с использованием while. И обработка запроса будет следующей
$res = mysql_query($query); $row = mysql_fetch_row($res); echo "Фамилия пятого человека в списке: ".$row[0]."\n";
Здесь вместо mysql_fetch_array() мы применили mysql_fetch_row(). Т.е. получить значение поля (или полей) конкретной строки. Поскольку поле у нас было одно - surname - мы можем обратиться к единственному элементу массива $row как $row[0];.
Далее мы не будем столь подробно останавливаться на обработке запросов, а будем рассматривать наиболее типичные примеры собственно запросов.
Итак, рассмотрим наиболее типичные примеры запросов MySQL. Рассмотрение проведем на базе таблицы my_sql_table:
1. Добавим в таблицу my_sql_table поле middle_name (отчество) после surname:
1. Добавим в таблицу my_sql_table поле middle_name (отчество) после surname:
$query = "ALTER TABLE `my_sql_table` ADD `middle_name` VARCHAR( 50 ) NOT NULL AFTER `surname`";
2. Теперь удалим поле surname из таблицы my_sql_table:
$query = "ALTER TABLE `my_sql_table` DROP `surname`";
3. Удаляем записи из таблицы my_sql_table с фамилией Сидоров :
$query = "DELETE FROM `my_sql_table` where surname='Сидоров'";
4. Помимо знаков равенства, также "больше" или "меньше", в языке MySQL запросов существует понятие "похоже на". Выберем записи из таблицы my_sql_table, где в фамилии встречается "дор" :
$query = "SELECT * FROM `my_sql_table` where surname like '%дор%'";
Здесь наличие "%" в начале и конце 'дор' и означает, что запрос будет искать именно 'дор', причем не важно в начале, конце, или середине фамилии он находится. Рассмотрим следующий пример
5. Выберем записи из таблицы my_sql_table с фамилией, которая начинается на П. Обратите внимание на расположение "%":
5. Выберем записи из таблицы my_sql_table с фамилией, которая начинается на П. Обратите внимание на расположение "%":
$query = "SELECT * FROM `my_sql_table` where surname like 'П%'";
6. Вычислим максимальное значение id:
$query = "SELECT MAX(id) FROM `my_sql_table`";
7. Вычислим количество полей в my_sql_table с фамилией, которая начинается на П.
$query = "SELECT COUNT(*) FROM `my_sql_table` where surname like 'П%'";
8. Удаление таблицы my_sql_table:
$query = "DROP TABLE `my_sql_table`";
Для запросов 1-3 на языке PHP достаточно просто выполнить запрос:
mysql_query($query);
Мы рассмотрели наиболее характерные примеры запросов. Полагаю, с их помощью, следуя элементарной логике, Вы сможете выполнять более сложные запросы к созданным Вами таблицам баз данных MySQL.