Тема php и базы данных Mysql - polpoz.ru o_O
Главная
Поиск по ключевым словам:
";

echo "

";

// SQL-запрос:

$q = mysql_query ("SELECT * FROM mytable");

// Выводим таблицу:

for ($c=0; $c

{

echo "

";



$f = mysql_fetch_array($q);

echo "

";

echo "

";
echo "";

}

echo "

страница 1
Похожие работы
Тема php и базы данных Mysql - страница №1/1


Халелова Е.Н.


Тема 4.6. PHP и базы данных MySQL.
Тип лекции: текущая

План:


  1. PHP и базы данных

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




  1. PHP и базы данных

PHP поддерживает взаимодействие с большим количеством различных систем управления базами данных (СУБД).

MySQL - это популярная система управления базами данных (СУБД), очень часто применяемая в сочетании с PHP.

База данных представляет собой структурированную совокупность данных. Эти данные могут быть любыми - от простого списка предстоящих покупок до перечня экспонатов картинной галереи или огромного количества информации в корпоративной сети. Для записи, выборки и обработки данных, хранящихся в компьютерной базе данных, необходима система управления базой данных, каковой и является ПО MySQL. Поскольку компьютеры замечательно справляются с обработкой больших объемов данных, управление базами данных играет центральную роль в вычислениях. Реализовано такое управление может быть по-разному - как в виде отдельных утилит, так и в виде кода, входящего в состав других приложений.

MySQL - это система управления реляционными базами данных. В реляционной базе данных данные хранятся не все скопом, а в отдельных таблицах, благодаря чему достигается выигрыш в скорости и гибкости. Таблицы связываются между собой при помощи отношений, благодаря чему обеспечивается возможность объединять при выполнении запроса данные из нескольких таблиц. SQL как часть системы MySQL можно охарактеризовать как язык структурированных запросов плюс наиболее распространенный стандартный язык, используемый для доступа к базам данных.

MySQL - это ПО с открытым кодом. Применять его и модифицировать может любой желающий. Такое ПО можно получать по Internet и использовать бесплатно. При этом каждый пользователь может изучить исходный код и изменить его в соответствии со своими потребностями. Использование программного обеспечения MySQL регламентируется лицензией GPL (GNU General Public License), http://www.gnu.org/licenses/, в которой указано, что можно и чего нельзя делать с этим программным обеспечением в различных ситуациях.

Почему веб-программисты отдают предпочтение СУБД MySQL? MySQL является очень быстрым, надежным и легким в использовании. Если вам требуются именно эти качества, попробуйте поработать с данным сервером. MySQL обладает также рядом удобных возможностей, разработанных в тесном контакте с пользователями. Первоначально сервер MySQL разрабатывался для управления большими базами данных с целью обеспечить более высокую скорость работы по сравнению с существующими на тот момент аналогами. И вот уже в течение нескольких лет данный сервер успешно используется в условиях промышленной эксплуатации с высокими требованиями. Несмотря на то что MySQL постоянно совершенствуется, он уже сегодня обеспечивает широкий спектр полезных функций. Благодаря своей доступности, скорости и безопасности MySQL очень хорошо подходит для доступа к базам данных по Internet.

Технические возможности СУБД MySQL MySQL является системой клиент-сервер, которая содержит многопоточный SQL-сервер, обеспечивающий поддержку различных вычислительных машин баз данных, а также несколько различных клиентских программ и библиотек, средства администрирования и широкий спектр программных интерфейсов (API). Мы также поставляем сервер MySQL в виде многопоточной библиотеки, которую можно подключить к пользовательскому приложению и получить компактный, более быстрый и легкий в управлении продукт. Доступно также большое количество программного обеспечения для MySQL, в большей части - бесплатного.

MySQL состоит из двух частей: серверной и клиентской.

Сервер MySQL постоянно работает на компьютере. Клиентские программы (например, скрипты PHP) посылают серверу MySQL SQL-запросы через механизм сокетов (то есть при помощи сетевых средств), сервер их обрабатывает и запоминает результат. То есть скрипт (клиент) указывает, какую информацио он хочет получить от сервера баз данных. Затем сервер баз данных посылает ответ (результат) клиенту (скрипту).

Почему всегда передается не весь результат? Очень просто: дело в том, что размер результирующего набора данных может быть слишком большим, и на его передачу по сети уйдет чересчур много времени. Да и редко когда бывает нужно получать сразу весь вывод запроса (то есть все записи, удовлетворяющие выражению запроса). Например, нам может потребоваться лишь подсчитать, сколько записей удовлетворяет тому или иному условию, или же выбрать из данных только первые 10 записей. Механизм использования сокетов подразумевает технологию клиент-сервер, а это означает, что в системе должна быть запущена специальная программа — MySQL-сервер, которая принимает и обрабатывает запросы от программ. Так как вся работа происходит в действительности на одной машине, накладные расходы по работе с сетевыми средствами незначительны (установка и поддержание соединения с MySQL-сервером обходится довольно дешево).

Cтруктура MySQL трехуровневая: базы данных — таблицы — записи. Базы данных и таблицы MySQL физически представляются файлами с расширениями frm, MYD, MYI. Логически - таблица представляет собой совокупность записей. А записи - это совокупность полей разного типа. Имя базы данных MySQL уникально в пределах системы, а таблицы - в пределах базы данных, поля - в пределах таблицы. Один сервер MySQL может поддерживать сразу несколько баз данных, доступ к которым может разграничиваться логином и паролем. Зная эти логин и пароль, можно работать с конкретной базой данных. Например, можно создать или удалить в ней таблицу, добавить записи и т. д. Обычно имя-идентификатор и пароль назначаются хостинг провайдерами, которые и обеспечивают поддержку MySQL для своих пользователей.




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

Рассмотрим основные функции PHP, применяемые для работы с MySQL сервером.


Функции соединения с сервером MySQL
Основной функцией для соединения с сервером MySQL является mysql_connect(), которая подключает скрипт к серверу баз данных MySQL и выполяет авторизацию пользователя базой данных. Синтаксис у данной функции такой:

mysql_connect ([string $hostname] [, string $user] [, sting $password]);

Как вы наверно заметили, все параметры данной функции являются необязательными, поскольку значения по умолчанию можно прописать в конфигурационном файле php.ini. Если вы хотите указать другие имя MySQL-хоста, пользователя и пароль, вы всегда можете это сделать. Параметр $hostname может быть указан в виде: хост:порт.

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

Для закрытия соединения предназначена функция mysql_close(int $connection_id).

Вообще, соединение можно и не закрывать - оно будет закрыто автоматически при завершении работы PHP скрипта. Если вы используете более одного соединения, при вызове mysql_close() нужно указать идентификатор соединения, которое вы хотите закрыть. Вообще не закрывать соединения - плохой стиль, лучше закрывать соединения с MySQL самостоятельно, а не надеясь на автоматизм PHP, хотя это ваше право.

Если вы будете использовать только одно соединение с базой данных MySQL за все время работы сценария, можно не сохранять его идентификатор и не указывать идентификатор при вызове остальных функций.

Функция mysql_connect() устанавливает обыкновенное соединение с MySQL. Однако, PHP поддерживает постоянные соединения - для этого используйте функцию mysql_pconnect(). Аргументы этой функции такие же, как и у mysql_connect().

В чем разница между постоянным соединением и обыкновенным соединением с MySQL? Постоянное соединение не закрывается после завершения работы скрипта, даже если скрипт вызвал функцию mysql_close(). Соединение привязывается к PID потомка веб сервера Apache (от имени которого он и работает) и закрывается лишь тогда, когда удаляется процесс-владелец (например, при завершении работы или перезагрузке веб-сервера Apache).

PHP работает с постоянными соединениями примерно так: при вызове функции mysql_pconnect() PHP проверяет, было ли ранее установлено соединение. Если да, то возвращается его идентификатор, а если нет, то открывается новое соединение и возвращается идентификатор.

Постоянные соединения позволяют значительно снизить нагрузку на сервер, а также повысить скорость работы PHP скриптов, использующих базы данных.

При работе с постоянными соединениями нужно следить, чтобы максимальное число клиентов Apache не превышало максимального числа клиентов MySQL, то есть параметр MaxClient (в конфигурационном файле Apache - httpd.conf) должен быть меньше или равен параметру max_user_connection (параметр MySQL).


Функция выбора базы данных
Функция mysql_select_db (string $db [, int $id]) выбирает базу данных, с которой будет работать PHP скрипт. Если открыто не более одного соединения, можно не указывать параметр $id.

// Попытка установить соединение с MySQL:

if (!mysql_connect($server, $user, $ password)) {

echo "Ошибка подключения к серверу MySQL";

exit;

}

// Соединились, теперь выбираем базу данных:


mysql_select_db($db);
Функции обработки ошибок

Если произойдет ошибка соединения с MySQL, то вы получите соответствующее сообщение и скрипт завершит свою работу. Это не всегда бывает удобно, прежде всего, при отладке скриптов. Поэтому, в PHP есть следующие две функции:



  • mysql_errno(int $id);

  • mysql_error(int $id);

Первая функция возвращает номер ошибки, а вторая - сообщение об ошибке. В результате мы можем использовать следующее:

echo "ERROR ".mysql_errno()." ".mysql_error()."\n";

Теперь вы будете знать, из-за чего произошла ошибка - вы увидите соответствующим образом оформленное сообщение.
Функции выполнения запросов к серверу баз данных

Все запросы к текущей базе данных отправляются функцией mysql_query(). Этой функции нужно передать один параметр - текст запроса. Текст запроса модет содержать пробельные символы и символы новой строки (\n). Текст должен быть составлен по правилам синтаксиса SQL. Пример запроса:

$q = mysql_query("SELECT * FROM mytable");

Приведенный запрос должен вернуть содержимое таблицы mytable. Результат запроса присваивается переменной $q. Результат - это набор данных, который после выполнения запроса нужно обработать определенным образом.




Функции обработки результатов запроса
Если запрос, выполненный с помощью функции mysql_query() успешно выполнился, то в результате клиент получит набор записей, который может быть обработан следующими функциями PHP:

  • mysql_result() - получить необходимый элемент из набора записей;

  • mysql_fetch_array() - занести запись в массив;

  • mysql_fetch_row() - занести запись в массив;

  • mysql_fetch_assoc() - занести запись в ассоциативный массив;

  • mysql_fetch_object() - занести запись в объект.

Также можно определить количество содержащихся записей и полей в результате запроса. Функция mysql_num_rows() позволяет узнать, сколько записей содержит результат запроса:

$q = mysql_query("SELECT * FROM mytable");

echo "В таблице mytable ".mysql_num_rows($q)." записей";

Запись состоит из полей (колонок).

С помощью функции mysql_num_fields() можно узнать, сколько полей содержит каждая запись результата:

$q = mysql_query("SELECT * FROM mytable");

echo "В таблице mytable ".mysql_num_fields($q)." полей ";

У нас также есть возможность узнать значение каждого поля. Это можно сделать с помощью следующей функции:



mysql_result (int $result, int $row, mixed $field);

Параметр функции $row задает номер записи, а параметр $field - имя или порядковый номер поля.

Предположим, SQL-запрос вернул следующий набор данных:

Email                  Name    Last_Name

…………………………………………………………..

ivanov@mail.ru     Ivan     Ivanov

petrov@mail.ru     Petr      Petrov

Вывести это в браузер можно следующим образом:

$rows = mysql_num_rows($q);

$fields = mysql_num_fields($q);

echo "
";

  for ($c=0; $c<$rows; $c++) {

     for ($cc=0; $cc<$fields; $cc++) {

     echo mysql_result($q, $c, $cc)."\t";

     echo "\n";

     }


  }

echo "
";

Следует отметить, что функция mysql_result() универсальна: зная количество записей и количество полей, можно "обойти" весь результат, но в тоже время, скорость работы данной функции достаточно низка. Поэтому, для обработки больших наборов записей рекомендуется использовать функции mysql_fetch_row(), mysql_fetch_array(), и.т.д.

Функция mysql_fetch_row(int $res) получает сразу всю строку, соответствующую текущей записи результата $res. Каждый следующий вызов функции перемещает указатель запроса на следующую позицию (как при работе с файлами) и получает следующую запись. Если более нет записей, то функция возвращает FALSE. Пример использования данной функции:

$q = mysql_query("SELECT * FROM mytable WHERE month=\"$db_m\" AND day=\"$db_d\");

for ($c=0; $c

{

$f = mysql_fetch_row($q);



echo $f;

}

Использовать функцию mysql_fetch_row() не всегда удобно, так как значения всех полей одной записи находятся все в одной строке. Удобнее использовать функцию mysql_fetch_array(), которая возвращает ассоциативный массив, ключами которого будут имена полей.



Функция mysql_fetch_array(int $res [, int $result_type]) возвращает не ассоциативный массив, а массив, заданный необязательным параметром $result_type, который может принимать следующие значения:

  • MYSQL_ASSOC - возвращает ассоциативный массив;

  • MYSQL_NUM -возвращает массив с числовыми индексами, как в функции mysql_fecth_row();

  • MYSQL_BOTH - возвращает массив с двойными индексами, то есть вы можете работать с ним, как с ассоциативным массивом и как со списком (MYSQL_BOTH - это значение по умолчанию для параметра $result_type.

В PHP есть функция, возвращающая ассоциативный массив с одним индексом:

mysql_fetch_assoc(int $res);

Фактически, данная функция является синонимом для mysql_fetch_array($res, MYSQL_ASSOC);

Пример использования функции mysql_fecth_array():

$q = mysql_query("SELECT * FROM mytable WHERE month=\"$db_m\" AND day=\"$db_d\");

for ($c=0; $c

{

$f = mysql_fetch_array($q);



echo "$f[email] $f[name] $f[month] $f[day]
";

}

Как видно, использовать функцию mysql_fetch_array() намного удобнее, чем mysql_fetch_row().


Функции получения информации о результатах SQL-запросов
PHP предоставляет еще несколько полезных функций, которые позволяют узнать информацию о результах SQL-запросов.

  • Функция mysql_field_name(int $result, int $offset) возвращает имя поля, находящегося в результате $result с номером $offset (нумерация начинается с 0). Другими словами, функция возвращает имя поля с номером $offset.

  • Функция mysql_field_type(int $result, int $offset) возвращает тип поля с номером $offset в результате $result (номер задается относительно результата, а не таблицы);

  • Функция mysql_field_flags(int $result, int $offset) возвращает пречисленные через пробел флаги (модификаторы), которые имеются у поля с номером $offset. Перечислим все поддерживаемые MySQL флаги:

Таблица 1- Модификаторы, поддерживаемые PHP




Флаг

Описание

not_Null

Поле не может содержать неопределенного значения (NULL), то есть поле должно быть явно инициализировано

Primary_Key

Поле будет первичным ключом - идентификатором записи, по которому можно однозначно идентифицировать запись;

auto_increment

При вставке новой записи значение этого поля будет автоматически увеличено на единицу, потому в таблице никогда не будет двух записей с одинаковым значением этого поля;

Unique_Key

Поле должно содержать уникальное значение;

Multiple_Key

Индекс

Blob

Поле может содержать бинарный блок данных

Unsigned

Поле содержит беззнаковые числа

Zerofill

Вместо пробелов используются символы с кодом \0

Binary

Поле содержит двоичные данные

enum

Поле может содержать один элемент из нескольких возможных (элемент перечисления)

timestamp

В поле автоматически заносится текущая дата и время при его модификации

Функция mysql_field_flags() возвращает флаги в виде строки, в которой флаги разделяются пробелами.


Скрипт вывода содержимого таблицы MySQL в виде HTML:
$host = "localhost";

$user = "user";
$password = "secret_password";

// Производим попытку подключения к серверу MySQL:

if (!mysql_connect($host, $user, $password))

{

echo "

MySQL Error!

";



exit;

}

// Выбираем базу данных:



mysql_select_db($db);

// Выводим заголовок таблицы:

echo "";

echo "

EmailИмяМесяц ЧислоПол
$f[email]$f[name]$f[month] $f[day]$[s]
";



?>
Контрольные вопросы:


  1. Почему отдается предпочтение СУБД MySQL?

  2. Из каких частей состоит MySQL?

  3. Назовите функцию соединения с БД MySQL и закрытия соединения

  4. Перечислите функции для работы с БД: выбора БД, выполнения запросов к БД, обработки ошибок

  5. Перечислите функции обработки результатов запроса БД

  6. Назовите функции для работы с ассоциативными массивами

  7. Перечислите функции получения информации о результатах SQL-запросов



izumzum.ru