Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

web - tec / PHP 5 для начинающи

.pdf
Скачиваний:
73
Добавлен:
12.06.2015
Размер:
26.79 Mб
Скачать

Введение в базы данных и SQL 373

вать MySQL ++++++ свободно доступную и широко используемую систему управления база+ ми данных, познакомится с некоторыми PHP+функциями для подключения к MySQL,

атакже для получения и модификации информации в базах данных.

Вданной главе представлено много теоретических сведений, поэтому она может показаться более сложной по сравнению с остальными главами книги. Практика раз+ работчика предполагает использование баз данных и их запуск на тестовой машине, поэтому в дальнейшем будет гораздо проще понять излагаемый в данной книге мате+ риал. По этой причине в течение нескольких следующих разделов рассмотрение са+ мого PHP отодвигается на задний план. Это позволит подготовиться к двум после+ дующим главам. Читатели, которые уже знакомы с базами данных и их работой, могут пропустить эту главу.

Хранение данных

В начале работы над управляемым данными приложением разработчик вынужден определиться с тем, какое хранилище данных будет использоваться в этом приложе+ нии. Иначе говоря, как и где приложение будет сохранять данные. Правильный ответ на этот вопрос всегда зависит от требований, предъявляемых к разрабатываемому приложению. В самом простом случае следует задать себе следующие вопросы:

Велико ли количество используемых приложением данных?

Высока ли частота доступа приложения к данным?

Высока ли частота модификаций данных?

Много ли пользователей могут одновременно попытаться получить данные?

Увеличивается ли количество данных со временем?

Велики ли будут потери в случае искажения, похищения или неумышленного уничтожения данных?

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

Это не означает, что текстовые файлы бесполезны ****** например, когда посетители пытаются войти в защищенную паролем область, Web*сервер Apache (если не задана иная конфигурация) аутентифицирует их, сверяя введенные ими данные с текстовым файлом, содержащим полный список пользовательских идентификаторов и паролей. Невелика проблема, если требуется обслуживать небольшую группу пользователей, но если понадобится одновременно проверять сотни пользовательских идентификаторов, то системе придется сканировать текстовый файл строку за строкой, пока не будет найдено совпадение. Пользователю, который записан в таком файле последним, придется очень долго ждать, пока Apache найдет его идентификационные данные и разрешит вход в защищенную область.

Часто наиболее эффективной альтернативой этому способу является использование для хранения, получения и модификации информации базы данных или, точнее, систе+ мы управления базами данных (СУБД). Хорошая система управления базами данных от+ лично справляется с ролью эффективного посредника между пользователем и данными. Она организовывает, каталогизирует, резервирует и выполняет целый ряд других опе+ раций, которые направлены на то, чтобы ускорить и облегчить работу с данными.

374 Глава 9

Как база данных сохраняет информацию? Это в некоторой степени зависит от ис+ пользуемой системы управления базами данных, хотя в конечном итоге данные хранят+ ся в виде потоков битов и байтов во множестве файлов ++++++ именно файлов. В действи+ тельности избавиться от файлов не удастся. Однако хорошие базы данных обладают средствами, которые позволяют использовать эти файлы как можно более эффективно.

Базы данных

Что же означает понятие база данных? Строго говоря, база данных представляет собой эффективно организованную совокупность данных, точно так же как библио+ тека представляет собой не более чем упорядоченную совокупность книг. Однако ко+ гда речь заходит о библиотеке, мы чаще всего подразумеваем учреждение в целом ++++++

не только книги, но и персонал, практику работы, а также здание. То же можно ска+ зать и о базах данных, которая представляет собой совокупность: систему управления базами данных и сами данные.

Это не удивительно, потому что в обычных условиях контакт с ‘‘сырыми’’ данными осуществляется только через СУБД или, говоря менее формальным языком, через ба+ зу данных. В большинстве случаев пользователь не видит ‘‘связи’’ этих понятий, по+ этому реальных практических различий не существует. Далее в главе обсуждаются те+ мы установки базы данных, подключения и обращения к ней и т.д., при этом понятие ‘‘база данных’’ используется в его наиболее употребительном, обобщающем смысле.

Архитектурыбаз данных

Прежде всего необходимо определиться с используемой базой данных и типом ее архитектуры. Существует два основных варианта: архитектура встроенных баз дан+ ных и клиент/серверная архитектура. Ниже вкратце рассматриваются оба типа.

Встроенные базы данных

Встроенная база данных работает и хранит данные на той же машине, что и про+ грамма, которая использует эти данные (в данном случае PHP). Такая база данных не+ доступна в сети и в определенный момент времени к ней может подключиться только одна программа. Кроме того, база данных не может совместно использоваться не+ сколькими машинами, потому что каждая из них в конечном итоге сохраняет и ис+ пользует свою собственную отдельную версию данных. Продолжая аналогию с биб+ лиотеками, можно сказать, что такая база данных подобна персональной библиотеке, к которой пользователь имеет исключительный доступ. Часто в мелких приложениях использовать встроенные базы данных более предпочтительно. В более крупных сис+ темах чашу весов перевешивают большие реляционные системы управления базами данных (СУРБД) и поэтому большинство коммерческих предприятий используют клиент/серверные архитектуры баз данных.

В число давно существующих, популярных примеров встроенных баз данных включаются dBase и DBM. PHP предоставляет связь с обеими системами. Недавно в этот перечень добавилась база данных SQLite, которая доступна не только как рас+ ширение для PHP, а фактически встроена в дистрибутив PHP5. SQLite стоит изучить хотя бы только по этой причине. А впечатляющая статистика по производительности определенно подтверждает статус этой системы как перспективной технологии баз данных в PHP. Более подробная информация об SQLite представлена в приложении В, ‘‘Использование SQLite’’.

Введение в базы данных и SQL 375

Клиент/серверные базы данных

Клиент/серверные базы данных предназначены для использования через сеть и позволяют множеству пользователей (которые могут находиться в разных уголках планеты) работать одновременно с одними и теми же данными. Сама база данных (или СУБД) работает как сервер в режиме, очень похожем на режим работы Web+ сервера, который обсуждался в первых главах книги. В принципе, такая база данных способна обрабатывать запросы, поступающие через сетевое соединение из любой точки мира и от любой подходящей клиентской программы. Вместе с тем, нет при+ чин, препятствующих запуску сервера и клиентской программы на одной машине.

Клиент/серверные базы данных близки к метафоре публичной библиотеки. Пуб+ личная библиотека открыта для всех, кто имеет членский билет (т.е. зарегистрирован в библиотеке), а множество работающих в ней библиотекарей могут одновременно обслуживать запросы от большого количества посетителей. Посетители могут прийти лично или позвонить в библиотеку по телефону.

Фактическая работа по поиску и возвращению книг на полки может быть делеги+ рована помощнику, и посетители могут об этом не беспокоиться. Каждый библиоте+ карь, принимающий посетителей, может обслуживать несколько посетителей одно+ временно, но если он хорошо выполняет свою работу, то, вероятно, уделяет каждому читателю достаточно времени, и все посетители довольны таким обслуживанием. Анало+ гично, когда несколько пользователей одновременно получают доступ к клиент/сервер+ ной базе данных, сервер баз данных периодически переключается между ними, создавая у каждого иллюзию одновременного обслуживания всех пользователей.

Описанный выше вид баз данных наиболее распространен в крупных компаниях, где большое количество данных должно использоваться совместно многими сотруд+ никами, где доступ может осуществляться из любой точки сети и где наличие центра+ лизованного хранилища данных значительно упрощает такие важные задачи, как ад+ министрирование и резервное копирование информации. Любые приложения, которые нуждаются в доступе к базам данных, используют специализированные, лег+ ковесные клиентские программы для сообщения с сервером.

Установка и администрирование некоторых СУРБД (систем управления реляци+ онными базами данных) часто оказывается очень дорогим и сложным мероприятием. Общепризнанными представителями этого типа баз данных являются Oracle, DB/2 (производства IBM) и SQL Server (Microsoft) ++++++ массивные, многофункциональные системы, способные хранить и обрабатывать практически любые данные, которые могут понадобиться на современном предприятии. Оборотная сторона этой меда+ ли ++++++ тяжеловесность и дороговизна таких систем, к тому же они могут содержать больше функций, чем от них требуется.

К счастью, существуют альтернативы, такие как системы PostGreSQL и MySQL, каждая из которых представляет собой клиент/серверную систему баз данных с от+ крытым исходным кодом и вот уже много лет является весьма популярной среди PHP+ разработчиков. Эти системы быстры, стабильны и легко удовлетворяют потребности большинства мелких и средних проектов, и, что не менее важно, они бесплатны.

Выбор базы данных

В принципе, в PHP+приложениях можно использовать любую из этих систем. Можно даже привязать одно приложение к нескольким различным системам баз дан+ ных. Чтобы сохранить разумные размеры этой и двух последующих глав, авторы ре+ шили сосредоточиться на одной СУБД ++++++ MySQL.

376 Глава 9

По сравнению с другими данная система предоставляет ряд преимуществ:

это одна из самых популярных систем управления базами данных, используе+ мых в настоящее время в Web+среде;

она свободно доступна для загрузки из Internet и установки на практически лю+ бой машине;

ее легко установить на многих операционных системах (включая Windows и Unix);

эта система доступна как сравнительно недорогая функция во многих пакетах Web+хостинговых услуг;

она проста в использовании и включает в себя несколько удобных инструмен+ тов администрирования;

это быстрая, мощная клиент/серверная система, которая справляется с очень крупными, сложными базами данных и хорошо проявляет себя, когда дело ка+ сается крупных проектов.

Если последний критерий не является определяющим для какого+либо разрабаты+ ваемого приложения (и если нести дополнительные затраты, связанные с функцио+ нальностью баз данных на Web+сервере, нежелательно), то можно с успехом исполь+ зовать встраиваемую базу данных, такую как SQLite.

MySQL ****** свободно доступная СУРБД, разработчики которой лишь недавно присоединились к сообществу открытого исходного кода, выпустив MySQL под лицензией GPL (GNU Public License ****** общедоступная лицензия GNU). Даже до того как она стала бесплатной, для некоммерческого ее использования или использования не на Windows*платформах (Windows*версия MySQL была условно бесплатной) не требовалось покупать лицензию. Уже одно только то, что за использование MySQL теперь не нужно платить деньги, делает эту систему серьезным кандидатом для разработки приложений с базами данных. Если лицензия GPL по какой*либо причине не устраивает разработчика или MySQL требуется внедрить в коммерческое приложение, то все*таки придется приобрести коммерческую лицензионную версию у разработчиков продукта на сайте www.mysql.com.

Здесь и в последующих главах вводится много новых понятий, которые выходят за рамки одной определенной системы управления базами данных, поэтому для начала остановимся на MySQL.

Установка MySQL

В качестве примеров баз данных в книге используются базы данных MySQL, по+ этому читателю следует научиться устанавливать и запускать эту систему.

К моменту написания книги была доступна стабильная версия MySQL 4.0, а фай+ лы (как исходные коды так и скомпилированные бинарные файлы для различных платформ) были доступны на сайте MySQL по адресу www.mysql.com/downloads/ mysql-4.0.html.

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

Введение в базы данных и SQL 377

Установка на Windows

Бинарный установочный пакет для Windows поставляется в виде zip+архива (например, mysql-4.0.16-win.zip), содержащего множество файлов, включая ис+ полняемый файл setup.exe. Для установки MySQL необходимо запустить этот файл, после чего мастер инсталляции предложит несколько параметров установки. Эти па+ раметры определяют, какие файлы будут установлены и где они будут храниться впо+ следствии. Конфигурация по умолчанию (установка в каталог C:\MySQL) должна удовлетворить многих пользователей.

Все основные программы MySQL хранятся в каталоге bin инсталляционного паке+ та. Если при установке были сохранены значения по умолчанию, то путь к файлам этих программ будет C:\mysql\bin. Большинство данных программ (например, mysql.exe, mysqladmin.exe и mysqld.exe) являются инструментами командной строки, поэтому их не следует запускать посредством двойного щелчка мышью на пиктограмме. Их можно будет увидеть в действии позднее.

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

При первом запуске программа потребует ввести имя пользователя и пароль и соз+ даст учетную запись пользователя для работы со средством администрирования баз данных. После этого запускается программа MySQL+сервера, которая в случае пра+ вильной установки должна запуститься впервые.

После запуска сервера программа winmysqladmin сворачивается в пиктограмму с изображением светофора в панели задач (обычно в правом нижнем углу экрана). Зе+ леный огонек показывает, что сервер запущен, а красный ++++++ что сервер остановлен.

Щелчок правой кнопкой мыши на пиктограмме вызывает контекстное меню, по+ зволяющее запустить или остановить сервер, а также вывести окно winmysqladmin (рис. 9.1), в котором можно просматривать и редактировать различные параметры сервера.

Установка MySQL на Linux

Пользователи Linux могут установить MySQL из бинарного пакета или из исходно+ го кода. В случае использования RPM+пакета необходимо убедиться, что на машине имеются инсталляционные пакеты сервера, клиента, подключаемые файлы и библио+ теки, а также клиентские общие библиотеки для используемой платформы. Должны присутствовать следующие четыре файла (хотя точные имена могут отличаться в за+ висимости от версии MySQL и используемой операционной системы):

MySQL-4.0.16.i386.rpm

MySQL-client-4.0.16.i386.rpm

MySQL-devel-4.0.16.i386.rpm

MySQL-shared-4.0.16.i386.rpm

В случае использования исходного кода понадобится только один архив, mysql- 4.0.18.tar.gz.

378 Глава 9

Рис. 9.1.

Установка MySQL из RPM-пакетов

RPM+пакеты устанавливаются с помощью следующей команды:

> rpm -Uvh filename.rpm

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

При установке первого пакета, содержащего MySQL+сервер, на экране появится следующий текст:

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! This is done with:

/usr/bin/mysqladmin -u root password 'new-password' See the manual for more instructions.

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at http://www. mysql.com

Support MySQL by buying support/licenses at http://www.tcx.se/license.htm. Starting mysqld daemon with databases from /var/lib/mysql

ПОЖАЛУЙСТА, НЕ ЗАБУДЬТЕ УСТАНОВИТЬ ПАРОЛЬ ДЛЯ MySQL-ПОЛЬЗОВАТЕЛЯ root! Это делается с помощью команды:

/usr/bin/mysqladmin -u root password 'новый-пароль'

Дальнейшие инструкции см. в документации.

Пожалуйста, создавайте отчеты о проблемах с помощью сценария

/usr/bin/mysqlbug

Последняя информация о MySQL доступна на Web-сайте

http://www.mysql.com

Чтобы получить техническую поддержку, необходимо приобрести лицензию

Введение в базы данных и SQL 379

http://www.tcx.se/license.htm.

Запускайте mysqld-демон с базами данных из каталога /var/lib/mysql

Программа mysqladmin является одним из клиентских инструментов, поэтому необ+ ходимо повременить с установкой пароля до инсталляции клиентского пакета, кото+ рая описана в этой главе далее. RPM немедленно запускает программу MySQL+сервера mysqld (MySQL+демон). Кроме того, создается сценарий запуска и останова /etc/ rc.d/init.d/mysql, который гарантирует, что MySQL+сервер будет запускаться каж+ дый раз при загрузке и останавливаться при выключении компьютера. Следующий сце+ нарий можно использовать для запуска и останова mysqld:

>/etc/init.d/mysql start

>/etc/init.d/mysql stop

Теперь следует установить пакеты MySQL+client, MySQL+devel и MySQL+shared, по+ сле чего можно переходить к разделу ‘‘Конфигурирование MySQL’’ данной главы.

Установка MySQL из исходного кода

Устанавливать MySQL из исходного кода довольно просто. Для этого необходимо загрузить архив с Web+сайта MySQL и начать процесс инсталляции:

>tar -zxvf mysql-4.0.18.tar.gz

>cd mysql-4.0.18

>./configure --prefix=/usr

>make

Если программа make аварийно завершается, то, скорее всего, это происходит из+ за недостатка памяти. Такое возможно даже на довольно мощных машинах. В этой си+ туации можно сделать следующее:

>rm -f config.cache

>make clean

>./configure --prefix=/usr --with-low-memory

>make

Если и это не помогает, обратитесь к документу www.mysql.com/doc/en/ Compilation_problems.html.

Предположим, что сценарии configure и make выполнились без сбоев, тогда для завершения инсталляции достаточно ввести следующие команды:

>make install

>mysql_install_db

Вдальнейшем для запуска и останова MySQL+сервера, mysqld понадобятся специ+ альные сценарии. Ниже приводится пример сценария для запуска:

#!/bin/bash /usr/bin/mysqld_safe &

и соответственно для останова:

#!/bin/bash

kill 'cat /usr/var/$HOSTNAME.pid'

Эти сценарии имеются в пакете исходных кодов, который можно загрузить с Web+ страницы данной книги (www.wrox.com). Тем, кто предпочитает писать сценарии запуска и останова самостоятельно, рекомендуется создать в текстовом редакторе со+ ответствующие файлы, а затем с помощью команды chmod присвоить им права на вы+ полнение. Например, если сценарий был сохранен как startmysqld, то следует вве+ сти такую команду:

> chmod ugo+rx startmysqld

380 Глава 9

Конфигурирование MySQL

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

Для конфигурирования MySQL, как и в случае большинства сетевых систем (включая другие клиент+серверные базы данных, операционной системы и т.д.), не+ обходимо войти в систему с определенной учетной записью. Такая мера предосто+ рожности ограничивает доступ к данным путем назначения специфических прав дос+ тупа для каждой учетной записи. Например, один пользователь может иметь право только на просмотр существующих данных, тогда как другому разрешено добавлять новые данные и даже, возможно, изменять привилегии других пользователей.

Главному пользователю в системе, который автоматически получает права на про+ смотр и изменение всех данных и настроек, обычно назначается имя root. Во время ус+ тановки MySQL учетная запись root создается автоматически, однако пароль для нее не устанавливается. Сразу после установки система доступна для использования (в том числе злонамеренного) любым пользователем, имеющим MySQL+клиент и сетевое подключение к данному серверу.

Чтобы обезопасить систему, необходимо из командной строки настроить учетную запись root, выполнив описанные ниже действия.

1.Вызвать окно командной строки и перейти в каталог, содержащий программ+ ные файлы MySQL (обычно C:\mysql\bin\ в Windows или /usr/bin/ в Linux).

2.Ввести следующую команду, подставив желаемый пароль вместо слова elephant:

> mysqladmin -uroot password elephant

После этого можно попытаться вводить в командной строке некоторые другие ко+ манды. Например, команда mysqlshow выводит перечень баз данных, доступных на сервере в текущий момент времени:

> mysqlshow

 

+-----------

+

| Databases |

+-----------

+

| mysql

|

| test

|

+-----------

+

Сразу после установки MySQL эта команда показывает, что сервер уже создал две собственных базы данных. Первая mysql ++++++ база данных, в которой хранится вся ин+ формация, необходимая для аутентификации пользователей. Вторая ++++++ пустая тесто+ вая база данных. Команда mysqlshow также может показать содержимое той или иной базы данных при условии ввода правильного пароля:

> mysqlshow -uroot -p mysql Enter password: ********

Database: mysql

 

+---------------

 

+

|

Tables

|

+---------------

 

+

| columns_priv

|

| db

 

|

| func

|

| host

|

| tables_priv

|

| user

|

+---------------

 

+

Введение в базы данных и SQL 381

В этом случае команда показывает содержимое базы данных mysql ++++++ все систем+ ные данные организованы в виде шести именованных таблиц. В примере наглядно демонстрируется модель хранения данных, которая используется в MySQL для орга+ низации данных. Прежде чем двигаться далее, вкратце рассмотрим некоторые теоре+ тические вопросы и попробуем разобраться, как такие группы таблиц позволяют эф+ фективно хранить данные.

Реляционные базы данных

Рассмотрим еще одну ключевую особенность баз данных ++++++ способ организации информации, с которой работают пользователи. Используя базу данных для получе+ ния модификации или добавления новых данных, необходимо знать, как запрашивать данные. Более того, когда приходится самостоятельно разрабатывать базу данных, необходимо сообщить системе, какие данные и где будут в ней находиться, а также как они будут логически связаны друг с другом.

Большинство баз данных используют так называемую реляционную модель дан+ ных, поэтому они называются реляционными базами данных (или системами управления реляционными базами данных ++++++ СУРБД). В таких базах данные организованы в таб+ лицах, каждая из которых разделяется на строки и столбцы.

В терминах баз данных каждая строка в таблице (кроме заголовка) представляет запись данных: набор внутренне связанных блоков данных. Аналогично, каждый стол+ бец представляет поле: определенный тип данных, который имеет одну и ту же значи+ мость для каждой записи в таблице.

С практической точки зрения понятие ‘‘строка’’ является синонимом записи, а ‘‘столбец’’ ****** синонимом поля. Это необходимо учитывать при визуализации таблиц.

Предположим, что менеджер команды по регби (вид спорта выбран случайно и никак не влияет на понимание работы баз данных) создает базу данных, чтобы от+ слеживать матчи, в которых участвовала его команда, и просит каждого игрока вво+ дить в базу данных после каждого матча свои данные. После второго круга таблица менеджера выглядит так:

Player_Number

Name

Phone_number

Date_Played

Nickname

 

 

 

 

 

42

David

555–1234

03/03/04

Dodge

6

Nic

555–3456

03/03/04

Obi-d

2

David

555–6543

03/03/04

Witblitz

14

Mark

555–1213

03/03/04

Greeny

2

David

555–6543

02/25/04

Witblitz

25

Pads

555–9101

02/25/04

Pads

6

Nic

555–3456

02/25/04

Obi-d

7

Nic

555–5678

02/25/04

Nicrot

 

 

 

 

 

Вскоре становится ясно, что данная таблица будет сильно разрастаться после каж+ дого сыгранного сезона. Очевидно, что такая структура таблицы неэффективна, по+

382 Глава 9

тому что данные каждого игрока ++++++ номер, имя, телефонный номер и т.д. ++++++ вводятся после каждого матча с его участием.

Подобная избыточность в базах данных нежелательна. Например, предположим, что игрок под номером 6 постоянно пропускает голы, и члены его команды решили дать ему новое прозвище (которое здесь не упоминается). Чтобы обновить таблицу, необходимо модифицировать каждую из записей игрока (т.е. поменять в каждой за+ писи значение поля Nickname).

Вдополнение к этому, вводимые игроком после каждого матча данные потребля+ ют ценное пространство на жестком диске. Избыточность крайне неэффективна, впустую расходуется время и пространство на жестком диске.

Вначале 70+х годов прошлого века математик Э.Ф. Кодд (E.F. Codd) предложил уникальный и эффективный способ решения этой проблемы. Он зафиксировал набор правил, применение которых к данным гарантирует создание правильной структуры базы данных. На самом деле он предложил множество таких правил, здесь представ+ лены некоторые из них. Правила (или требования) можно сгруппировать в так назы+ ваемые нормальные формы (normal forms). Данные, соответствующие этим нормальным формам, в значительной степени обуславливают хорошую конструкцию реляционной базы данных. Рассмотрим теперь суть процесса нормализации.

Нормализация

Нормализация определяется как ‘‘процесс разбиения данных на несколько таблиц с целью минимизации количества повторения одних и тех же данных’’. Нормальные формы представляют собой степени нормализации и регулируются изящным набо+ ром правил, которые описаны далее.

Первая нормальная форма (1NF)

Создавать новую таблицу для каждого нового набора связанных данных.

Исключить повторяющуюся информацию в каждой отдельной таблице.

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

Например, предыдущую таблицу можно представить в форме 1NF в виде двух таб+ лиц. Первая таблица ++++++ информация об игроках:

Player_Id

Name

Phone_number

Nickname

 

 

 

 

42

David

555–1234

Dodge

6

Nic

555–3456

Obi-d

14

Mark

555–1213

Greeny

2

David

555–6543

Witblitz

25

Pads

555–9101

Pads

6

Nic

555–3456

Obi-d

7

Nic

555–5678

Nicrot

 

 

 

 

Соседние файлы в папке web - tec