Все ленты — последние статьи

Функции PHP для работы с MySQL

Функции PHP для работы с MySQL

mysql_connect()
mysql_error()
mysql_query()
mysql_select_db()
mysql_close()
mysql_fetch_array()
mysql_num_rows()
mysql_num_fields()
mysql_result()

 

PHP запрос есть не что иное, как встроенная функция PHP, взаимодействующая с базой данных, для извлечения, удаления и редактирования данных.
В этом уроке мы рассмотрим наиболее часто встречающиеся PHP запросы для работы с СУБД MySQL.
СУБД — Система управления базами данных. Так же применяется аббревиатура СУРБД — Система управления реляционными базами данных, чем по своей структуре и является MySQL.
(relation [англ] — отношение).
PHP запросы — функции PHP
mysql_connect()
mysql_connect() — первый и наверно самый главный PHP запрос, но не самый часто применяемый, это соединение с сервером MySQL. В первом аргументе функции, указывается имя сервера или ip-адрес. Чаще всего значение этого аргумента устанавливается как localhost. Второй аргумент — это имя пользователя, под которым вы сможете подключиться к серверу MySQL и третий параметр — пароль. Эту информацию обычно вам предоставляет хостер у которого вы размещаете свой сайт и регистрируете (создаёте) базу данных.

Листинг № 1 — PHP запрос, функция mysql_connect() — соединения с базой данных.
<?php

$host = "localhost"; // имя или ip-адрес сервера MySQL
$user = "user_name"; // имя пользователя, под которым вы можете работать с базой данных
$pass = "password"; // пароль для доступа к БД


if(!mysql_connect($host, $user, $pass))
{
exit(mysql_error()); // выводится ошибка
}
else
{
echo "Вы успешно подключились к БД";
}

?>
Есть у этой функции ещё два необязательных аргумента. Дело в том, что по умолчанию при подключении функция возвращает, так называемый дескриптор соединения. Это некий код, который несёт в себе информацию о наличие соединения или его отсутствие, т.е. FALSE. Так вот повторный php запрос на соединение с базой данных вернёт уже созданный ранее дескриптор соединения. Это значит, что второе соединение по умолчанию не создаётся этой функцией. Для того чтоб это обойти, следует указать четвёртый аргумент со значением TRUE .
Пятый параметр обязательно должен принимать константу.
Константы пятого аргумента функции mysql_connect():

MYSQL_CLIENT_COMPRESS — следует использовать протокол сжатия при передачи данных от сервера клиенту, т.е браузеру.
MYSQL_CLIENT_IGNORE_SPACE — в SQL-запросах, между именем функции и открывающей скобкой, разрешаются пробелы
MYSQL_CLIENT_INTERACTIVE — ждать interactive_timeout секунд, потом закрыть соединение, если сервер и клиент не обмениваются никакими данными.

В листинге №1 показана схема подключения к базе данных, как правило этот скрипт выносится в отдельный файл и подгружается с помощью конструкции include или подобных, к любому файлу в котором нужно использовать соединение с MySQL.
mysql_error()
В скобках, после else, задействована функция mysql_error() — она выводит строку с описанием ошибки соединения. Это очень удобно при отладки. После того как вы проверили, что всё — соединение работает нормально, следует убрать эту функцию и сообщение о подтверждении соединения. Ниже пример как это могло бы выглядеть. Полностью рабочая версия файла, вы можете его использовать, лишь исправив значения переменных для подключения. Знак собаки (@) — предотвращает вывод сообщений об ошибках на монитор. Функция exit() — отключает дальнейшее исполнение скрипта. Эта функция не имеет ничего общего с MYSQL, это обычная функция PHP.

Листинг № 2 — Файл config.php — php запрос на подключение к БД
<?php

$host = "localhost"; // имя или ip-адрес сервера MySQL
$user = "user_name"; // имя пользователя, под которым вы можете работать с базой данных
$pass = "password"; // пароль для доступа к БД
$db = "name_db"; // имя базы данных к которой подключаемся

// Соединяемся с сервером MySQL
$connect = @mysql_connect($host, $user, $pass);

if(!@mysql_select_db($db, $connect))


// установка кодировки
mysql_query("SET character_set_client='cp1251'");
mysql_query("SET character_set_results='cp1251'");
mysql_query("SET collation_connection='cp1251_general_ci'");

?>

Листинг № 3 — Пример подключения файла config.php с помощью конструкции include
<?php
include "config.php";

// .. здесь код страницы …

?>
Отмечу сразу, в листинге №3 включение файла config.php происходит из той же директории, где находится скрипт запрашивающий этот файл. Это значит, что оба файла находятся в одной папке. С учётом того, что файл config.php обычно в единственном числе используется для сайта, то путь до него следует указывать относительно главной директории при этом можно использовать константу содержащую путь до файла config.php. А в идеале, в целях безопасности, этот файл следует вынести на уровень выше главной директории сайта.
mysql_query()
mysql_query — наверно самая, часто встречающаяся функция PHP для SQL-запроса. C помощью mysql_query(), непосредственно происходит передача, уже составленного SQL — запроса, к базе данных. Можно сказать, что все запросы из скрипта PHP к СУБД MySQL, отправляются с помощью mysql_query().
Функция принимает два аргумента. Первый аргумент — это строка со SQL-запросом, второй аргумент содержит дескриптор соединения, возвращаемый функцией mysql_connect(). Если вы работает с одной базой данных, то не следует указывать второй аргумент. Если дескриптор соединения отсутствует, mysql_query() пытается соединиться с БД используя параметры по умолчанию. Эти же параметры использует функция mysql_connect() при отсутствии данных для соединения.
Если аргументы функций mysql_connect() или mysql_query() отсутствуют, то любая из этих функций использует по умолчанию следующие параметры:


Server = ‘localhost:3306’

username — принимает значение владельца процесса сервера

password — принимает пустую строку

Листинг № 4 — mysql_query() пример работы. SQL-запрос на выборку всех данных.
<?php

// подключаемся к БД
include "config.php";

// Запрос к таблице test
$r = mysql_query("SELECT * FROM test");

?>
Листинг №4 запрос на выборку всех данных из таблицы test. На языке SQL это выглядит так: SELECT * FROM test, а прочитать это можно как:
-“Выбрать всё из таблицы test”

SELECT — выбрать
Звёздочка (*) — означает все данные.
FROM — из
test — имя таблицы из которой следует извлечь данные

В результате запроса, если прошло всё нормально, переменная $r будет содержать результирующую таблицу, а точнее дескриптор, который следует передать следующей функции php, для прочтения и обработки данных. Есть несколько часто используемых функций для обработки возвращаемых результатов. Ниже в этом уроке мы их рассмотрим. Например mysql_fetch_array(), mysql_result(), mysql_num_rows(), mysql_affected_rows(), mysql_num_fields().
mysql_select_db()
mysql_select_db — функция выбора базы данных. После подключения все запросы будут обращаться только к этой базе данных. Функция имеет два аргумента, первый принимает строку — название базы данных, а второй дескриптор соединения с сервером MySQL.
Если вы успели заметить, алгоритм подключения к базе данных (Листинг № 2), достаточно прост и состоит всего из двух этапов. Первый — подключение непосредственно к серверу MySQL и второй этап, выбор базы данных с которой будет работать скрипт на этом сервере.
mysql_close()
mysql_close — закрывает уже открытое соединение с сервером MySQL. В качестве аргумента получает дескриптор соединения с сервером от функции mysql_connect(). Возвращает TRUE при удачном завершении соединения и FALSE — в противном случаи.

Листинг № 5 — mysql_close() — работа функции
<?php

// Закрываем соединение
if(mysql_close($connect)){echo "Соединен с БД закрыто";}
else {echo "Не могу завершить соединение.";}

?>
Обработка данных, возвращаемых MySQL
mysql_fetch_array()
mysql_fetch_array() — для обработки полученных данных, самая часто используемая функция. В виде первого аргумента, эта функция принимает дескриптор возвращаемый функцией mysql_query() и может, в зависимости от второго аргумента, создать (возвратить), массив данных полученных в результате выборки из таблицы БД. Проще сказать возвращает массив по умолчанию, если указан второй аргумент как MYSQL_ASSOC — функция создаст ассоциативный массив, где ключами станут названия столбцов таблицы из БД, а значения — значения поля.
Так же есть ещё две константы, принимаемые вторым аргументом функции.

MYSQL_NUM — возвращает результат работы в виде численного массива.
MYSQL_BOTH — возвращает массив , содержащий численные индексы и ассоциативные.

Листинг № 9 — mysql_fetch_array() — пример работы функции
<?php

// Подключаемся к БД
include "config.php";

// Делаем выборку всех данных из таблицы test
$r = mysql_query("SELECT * FROM test");

// Проверяем удачно ли выполнен запрос
if(!$r)exit(mysql_error());

// Делаем обход массива и вывод на монитор данных из таблиц test
while($a = mysql_fetch_array($r))
{
echo $a[0].$a[1].$a['name']."<br>";
}

?>
В общем можно работать с этой функцией не указывая второй аргумент, так как по умолчанию она работает с MYSQL_BOTH — а это значит, что возвращается и числовой и ассоциативный массив, то есть в зависимости что вы укажете при обходе массива в индексе ( array[0] или array[name] ).
mysql_num_rows()
mysql_num_rows() — функция возвращает количество записей, в качестве единственного аргумента принимает дескриптор возвращённый функцией mysql_query(). Mysql_num_rows() подсчитывает записи только при запросе SELECT. Если требуется сделать подсчёт возвращённый при запросах DELETE, INSERT, UPDATE — для этого используется функция mysql_affected_rows().

Листинг № 6 — mysql_num_rows() пример работы функции
<?php

// подключаемся к БД
include "config.php";

// Запрос к таблице test
$r = mysql_query("SELECT * FROM test");

// Проверяем прошёл ли запрос
if(!$r){exit("Запрос не прошёл.");}

// Проверяем наличие записей в таблице test
// если есть хотя бы одна запись, то выполняется скрипт стоящий в фигурных скобках до else,
// в противном случаи после else
if(mysql_num_rows($r) > 0)
{
// первый скрипт …
}
else
{
// второй скрипт …
}

?>
mysql_num_fields()
mysql_num_fields() — подсчитывает количество столбцов таблицы к которой был запрос, принимает единственный аргумент — дескриптор возвращаемый функцией mysql_query().

Листинг № 7 — mysql_num_fields() — пример работы функции
<?php

// Подключаемся к БД
include "config.php";

// Делаем выборку всех данных из таблицы test
$r = mysql_query("SELECT * FROM test");

// Выводим количество столбцов таблицы test
echo mysql_num_fields($r);

?>
mysql_result()
mysql_result() — с помощью этой функции можно получить доступ к отдельно взятому полю таблицы. Функция mysql_result() принимает три аргумента, первый это дескриптор возвращаемый функцией mysql_query(). Второй аргумент это индекс, номер строки таблицы, ну и третий название столбца. Получается, как бы выбирается значение таблицы, которое попадает в обозначенное перекрестие строки и столбца, строка горизонталь и столбец вертикаль.

Листинг № 8 — mysql_result() — пример работы функции
<?php

// Подключаемся к БД
include "config.php";

// Делаем выборку всех данных из таблицы test
$r = mysql_query("SELECT * FROM user");
if(!$r)exit(mysql_error());
// Выводим имя пользователя, которое находится третьем в столбце name
echo mysql_result($r, 2, 'name');

?>
В листинге №8 продемонстрирован пример вывода единственного значения из таблицы user, столбца name и третьей строки. Почему третьей? Потому что счёт начинается с нуля. Можно так же представить, что это массив, отсчёт по индексу с начала массива.