Mysql пример базы данных


Содержание

Примеры SQL запросов к базе данных MySQL

Содержание статьи
1. Самые простые MySQL запросы
2. Простые SELECT (выбрать) запросы
3. Простые INSERT (новая запись) запросы
4. Простые UPDATE (перезаписать, дописать) запросы
5. Простые DELETE (удалить запись) запросы
6. Простые DROP (удалить таблицу) запросы
7. Сложные MySQL запросы
8. MySQL запросы и переменные PHP

1. Самые простые SQL запросы

1. Выведет список ВСЕХ баз.

2. Выведет список ВСЕХ таблиц в Базе Данных base_name.

2. Простые SELECT (выбрать) запросы к базе данных MySQL

SELECT – запрос, который выбирает уже существующие данные из БД. Для выбора можно указывать определённые параметры выбора. Например, суть запроса русским языком звучит так — ВЫБРАТЬ такие-то колонки ИЗ такой-то таблицы ГДЕ параметр такой-то колонки равен значению.

1. Выбирает ВСЕ данные в таблице tbl_name.

2. Выведет количество записей в таблице tbl_name.

3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.

4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.

5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.

6. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.

7. Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.

8. Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.

9. Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.

10. Выбирает все данные из колонок fname, lname из таблице users.

Внимание! Старайтесь указывать конкретные колонки (как в примере 10). Это важно для того, чтобы запросы обрабатывались намного быстрее!

11. Допустим у Вас в таблице пользовательских данных есть страна. Так вот если Вы хотите вывести ТОЛЬКО список встречающихся значений (чтобы, например, Россия не выводилось 20 раз, а только один), то используем DISTINCT. Выведет, из массы повторяющихся значений Россия, Украина, Беларусь. Таким образом, из таблицы users колонки country будут выведены ВСЕ УНИКАЛЬНЫЕ значения

12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.

13. Выбирает МАКСИМАЛЬНОЕ значение age в таблице users. То есть если у Вас в таблице самое большее значение age(с англ. возраст) равно 55, то результатом запроса будет 55.

14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.

15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.

3. Простые INSERT (новая запись) запросы

INSERT – запрос, который позволяет ПЕРВОНАЧАЛЬНО вставить запись в БД. То есть создаёт НОВУЮ запись (строчку) в БД.

1. Делает новую запись в таблице users, в поле name вставляет Сергей, а в поле age вставляет 25. Таким образом, в таблицу дописывается новая строки с данными значениями. Если колонок больше, то они оставшиеся останутся либо пустыми, либо с установленными по умолчанию значениями.

4. Простые UPDATE запросы к базе данных MySQL

UPDATE – запрос, который позволяет ПЕРЕЗАПИСАТЬ значения полей или ДОПИСАТЬ что-то в уже существующей строке в БД. Например, есть готовая строка, но в ней нужно перезаписать параметр возраста, так как он изменился со временем.

1. В таблице users ГДЕ id равно 3 значение поля age становится 18.

2. Всё то же самое, что и в первом запросе, просто показан синтаксис запроса, где перезаписываются два поля и более.
В таблице users ГДЕ id равно 3 значение поля age становится 18, а country Россия.

5. Простые DELETE (удалить запись) запросы к базе данных MySQL

DELETE – запрос, который удаляет строку из таблицы.

1. Удаляет строку из таблицы users ГДЕ id равен 10.

6. Простые DROP (удалить таблицу) запросы к базе данных MySQL

DROP – запрос, который удаляет таблицу.

1. Удаляет целиком таблицу tbl_name.

7. Сложные запросы к базе данных MySQL

Любопытные запросы, которые могут пригодиться даже опытным пользователям

Данный сложный запрос ВЫБИРАЕТ колонки id,name,country В ТАБЛИЦАХ users,admins ГДЕ registration_date (дата) не старше 14 дней И activation НЕ РАВНО , СОРТИРОВАТЬ по registration_date в обратном порядке (новое в начале).

Выше указан пример так называемого запроса в запросе в SQL. Обновить возраст среди пользователей на 18+, где пол — мужской. Подобные варианты запроса не рекомендую. По личному опыту скажу, лучше создать несколько отдельных — они будут прорабатываться быстрее.

8. Запросы к базе данных MySQL и PHP

В MySQL запросы в PHP странице можно вставлять переменные в качестве сравниваемых и тп значений. Пара примеров

1. Выбирает все записи из таблицы users, где поле fname соответствует значению переменной $name.

2. В таблице users ГДЕ id равно 3 значение поля age изменяется на значение переменной $age.

Внимание! Если Вам интересен какой-либо ещё пример, то пишите вопрос в комментарии!

Лекции по веб-программированию

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

MySQL — это популярная реляционная клиент-серверная СУБД, используемая в разных приложениях. Стандартным языком управления реляционных баз данных является SQL. SQL означает язык структурированных запросов (Structured Query Language), который MySQL использует для коммуникации с другими программами. Сверх того, MySQL имеет свои собственные расширенные функции SQL для того чтобы обеспечить пользователям дополнительный функционал.

Любая программа на языке PHP, которая собирается работать с MуSQL базой данных, должна состоять из следующих обязательных базовых шагов:
1. Установить связь с MySQL сервером.
2. Выбрать базу данных для работы.
3. Посылать команды MYSQL серверу и получать ответы.
4. Обработать результаты.
5. Закрыть связь с MySQL сервером.

Реализовать эти действия можно несколькими способами:
1. Используя стандартные классические функции обращения к БД MySQL.
2. Используя современные функции из расширения mysqli для версий начиная с PHP 5 и MySQL 4.1.
3. Используя классы и методы из расширения mysqli для версий начиная с PHP 5 и MySQL 4.1.

Рассмотрим на примерах как реализуется доступ к БД MySQL каждым из указанных способов.

Классический доступ к БД MySQL

Современное подключение к БД MySQL

Использование функций из расширения mysqli ускоряет большинство операций доступа к БД, иногда достигая 40-кратного увеличения производительности по сравнению с классическим методом. Также повышена безопасность работы с данными и добавлены новые функции.

Подключение к БД MySQL с использованием классов и методов

Объектно-ориентированный интерфейс предоставляет немного более лаконичный и менее восприимчивый к ошибкам способ подключения к базе данных.

Использование шаблонов запросов при обращении к базе данных

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

Процесс работы с шаблонами таков:

1. Подготовить для сервера MySQL шаблон запроса с параметрами.
2. Привязать переменные PHP к параметрам в заготовке запроса.
3. Дать команду серверу на выполнение запроса.
4. Запросить получение нового ряда данных в указанные переменные.

CREATE/DROP TABLE. Создание и удаление таблиц для базы данных в MySQL

Запрос на создание таблицы в MySQL

Для создания таблицы потребуется придумать:

  • Имя таблицы
  • Имена полей таблицы
  • Значения, которыми могут быть заполнены поля

Синтаксис запроса на создание таблицы.

Для примера создадим таблицу books со списком книг условной базы данных Bookstore.

Оповестим сервер MySQL с какой базой данных мы собираемся работать.

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

Составим запрос на создании таблицы со следующими полями:

  • id — Идентификатор записи.
  • title — название книги.
  • author — имя автора книги.
  • genre — жанр произведения в книге.
  • price — цена книги.
  • edition — номер издания.
  • isbn — номер ISBN.
  • page_num — число страниц в книге.
  • publish_year — год выхода книги в печать.
  • creation_date — дата создания записи (когда занесли книгу в БД).

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

  • UNSIGNED — позволяет увеличить диапазон числовых значений за счет отключения использования отрицательных чисел. Используется только с числовыми типами данных.
  • AUTO_INCREMENT — значение поля с этим атрибутом будет увеличиваться на 1 при каждом создании новой записи в таблице. Часто используется для автоматического заполнения полей с идентификатором записи.
  • PRIMARY_KEY — первичный ключ используется для идентификации записей в таблице. Первичным ключом может быть только уникальное значение поэтому чаще всего это значение поля id с атрибутом AUTO_INCREMENT .
  • NOT NULL — обязательное поле для заполнения (не может быть пустым).
  • DEFAULT — значение поля по умолчанию.

Каждая таблица должна иметь поле которое помечено как первичный ключ.

Создание таблицы в терминале:

]# mysql -u root -p
Enter password:
mysql> USE Bookstore;
Database changed

mysql> CREATE TABLE books(
-> >INT UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
-> title VARCHAR(50) NOT NULL ,
-> author VARCHAR(50) NOT NULL ,
-> genre SET( ‘Драма’ , ‘Роман’ , ‘Повесть’ , ‘Рассказ’ , ‘Поэма’ ) ,
-> price DECIMAL(15,2) ,
-> edition TINYINT UNSIGNED DEFAULT ‘1’ NOT NULL ,
-> isbn VARCHAR(50) ,
-> page_num SMALLINT UNSIGNED ,
-> publish_year SMALLINT(4) ,
-> creation_date TIMESTAMP );
Query OK, 0 rows affected (0.22 sec)

PHP и MySQL

Запросы MySQL с примерами: часть 2.

Введение

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

Теперь мы будем более глубоко изучать запросы MySQL. Итак, приступим!

Создание таблицы — CREATE TABLE

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

Вот код скрипта, который создаст нужную нам табличку:

В нашей таблице только два поля: логин и пароль. Пока что нам больше не нужно, не будем усложнять процесс.

Итак, таблица создана.

Добавление строк (записей) в таблицу — INSERT

Добавить новую строку в таблицу можно при помощи SQL команды insert. Вот пример:

SQL запрос состоит из команды INSERT INTO , имени базы данных users, затем в скобках идут имена полей, потом слово VALUE , после которого в скобках следуют добавляемые значения. Значения берутся в кавычки.

Синтаксис запроса выглядит так:

INSERT INTO имя_таблицы (столбец1, столбец2) VALUE (‘х1’, ‘х2’)

Кавычки во вторых скобках обязательны.

На месте значений могут быть переменные. Вот пример:

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

Существует быстрый способ вставки нескольких строк одним запросом INSERT :

Как видим, перечисляемые данные просто отделены запятыми.

Итак, при помощи команды INSERT мы научились добавлять записи в таблицу. Идём дальше.

Просмотр таблицы: команда SELECT

Теперь у нас есть таблица users, в которой есть строки. Прошлый скрипт можно запустить несколько раз, и каждый раз он будет добавлять строку в таблицу. Теперь мы можем не знать, сколько у нас строк в таблице. А хочется знать что у нас в ней записано.

Для получения данных из таблицы используется SQL-команда SELECT . Знак * обозначает что мы запрашиваем все данные, затем после слова FROM пишем имя таблицы, из которой хотим получить данные.

Запросим все данные из таблицы users:

Функция mysqli_query() вернула нам — мы его помещаем в переменную и в дальнейшем будем работать с ним при помощи других функций PHP.

Число записей в запросе

Давайте определим сколько строк в нашем запросе? Я вот запустил скрипт добавления записи в таблицу сам не помню сколько раз и теперь не знаю сколько строк в моей таблице.

Для определения числа строк в результате запроса используют функцию mysqli_num_rows() . Этой функции передаётся идентификатор результата запроса, а вернёт она число записей.

Если нам нужно узнать число записей в таблице, то приведённый способ не самый подходящий. Тут мы узнали число записей, найденных в запросе, но число записей в таблице ищется по другому.

Число записей в таблице SELECT COUNT(*)

Чтобы узнать число записей в таблице можно воспользоваться командой SELECT COUNT(*) FROM имя_таблицы .

Обратите внимание, тут мы использовали новую функцию PHP mysqli_fetch_row() для получения данных. Эта функция возвращает ряд результата запроса в форме простого массива, в нашем случае в ряду одно поле и оно имеет индес 0.

Просмотр результата запроса в цикле

После выполнения SQL-запроса с командой SELECT и получения идентификатора результата запроса, PHP создаёт в наборе записей результата внутренний указатель. Этот указатель автоматически перемещается на следующую запись, после обращения к текущей записи. Благодаря этому механизму набор результа запроса SELECT очень удобно просматривать в цикле.

В PHP есть несколько функций, при помощи которых можно дла каждой строки результирующего запроса получить массив, состоящий из её полей. Для примера возьмём функцию mysqli_fetch_row() . Этой функции передают идентификатор запроса, а возвращает она массив. Так в цикле просматривается весь результат запроса, по достижению конца результата запроса функция вернёт false .

Итак, запрашиваем все данные из таблицы users ( SELECT * FROM users ).

Функция mysqli_fetch_row() возвращает простой массив. В каждой итерации цикла мы получим массив с строкой из таблицы, доступ к полям которой мы можем получить указав числовой индекс.

То же самое можно сделать используя функцию mysql_fetch_assoc() , она возвращает ассоциативный массив.

Также есть функции mysqli_fetch_array() — возвращает любой тип массива, и mysqli_fetch_object() — возвращает объект.

Запрос SELECT DISTINCT — уникальные значения полей

Давайте создадим новую таблицу:

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

SQL-запрос » SELECT DISTINCT name FROM users » вернул результат со всеми уникальными именами в нашей таблице. Каждое уникальное имя в новой строке результата запроса.

Сортировка результата — ORDER BY

Добавив в SQL-запрос команду ORDER BY мы сортируем результат запроса по возрастанию (цифры и буквы по алфавиту). Вот пример, в котором можно сравнить обычный запрос и отсортированный по возрасту (поле age).

Можете заменить поле age в команде ORDER BY на поле name и посмотреть результат.

Чтобы сортировать результат запроса в обратном порядке используйте команду ORDER BY age DESC .

Соответствие условию — WHERE

Добавив в SQL-запрос команду WHERE мы запросим только те записи, которые соответствуют условию. Например, сделаем запрос на людей младше 30 лет.

Для этого используем SQL-запрос » SELECT * FROM users WHERE age «.

Также мы можем сразу отсортировать результат по возрастанию age:
» SELECT * FROM users WHERE age «.

Если мы сделаем запрос » SELECT name FROM users WHERE age «, то в результате нам вернут только значения поля «name», но они также будут отсортированы по age.

Мы можем запросить значения двух полей: » SELECT name, age FROM users WHERE age «.

Теперь запросим все пользователей, с именем «Max».

И ещё пример запроса , — выберет только имена (name) из таблицы users, все кроме Max.

SELECT name FROM users WHERE name!=’Max’

На этом с запросом WHERE всё.

Ограничение записей — LIMIT

Добавив в SQL-запрос команду LIMIT мы ограничим размер результата.

Запрос, который выводит первые три записи: » SELECT * FROM users LIMIT 3 «. Давайте посмотрим как он работает:

Также тут мы использовали запрос: » SELECT * FROM users LIMIT 3, 3 «. Вторая тройка указывает смещение в результате запроса.

Соответствие шаблону — LIKE

Язык SQL поддерживает простые шаблоны. Для этого используется команда LIKE и шаблон задаётся с использованием символа % .

Вот пример запроса, который вернёт все записи с именами, начинающимися на букву S.

SELECT * FROM users WHERE name LIKE ‘S%’

Вот пример запроса, который вернёт все записи с фамилиями, заканчивающимися на букву s.

SELECT * FROM users WHERE name LIKE ‘%s’

Соответствие условию — IN

Этот запрос с использованием команды IN вернёт только те строки, которые строго соответствую условию.

Например, нас интересуют люди с возрастом 21, 26 и 33 года.

SELECT * FROM users WHERE age IN (21,26,33)

Максимальное и минимальное значение в столбце

Выбирает максимальное значение age в таблице users.

SELECT max(age) FROM users

Следующий запрос выбирает данные из таблицы users по полям name и age где age принимает минимальное значение.

SELECT name, min(age) FROM users

Обновление записи — UPDATE

Давайте Max Lopes установим возраст 15 лет. Это делается запросом MySQL:

UPDATE users SET age=’15’ WHERE name=’Max’ AND surname=’Lopes’

Обратите внимание на новую команду AND (and — по английски значит «и») в запросе. Если мы не уточним фамилию, то возраст 15 лет будет установлен всем Максам в таблице.

Одним запросом можно обновить два и более полей в одной строке. Делается это следующим образом:

UPDATE users SET age = ’18’, surname = ‘Coocker’ WHERE

В нашей таблице нет поля id, так что этот запрос не сработает на ней. Но это поле, содержащее уникальные номера строк, мы обязательно выучим.

Удалить запись — DELETE

Запрос к базе данных MySQL для удаления записи:

DELETE FROM users WHERE

Опять же, в нашей таблице нет поля id. Но мы можем удалить из неё всех людей, младше 18 лет.

DELETE FROM users WHERE age

Удалить таблицу — DROP TABLE

Запрос к базе данных MySQL который удаляет целиком таблицу users:

DROP TABLE users

Удалить столбец — ALTER TABLE . DROP .

Иногда может потребоваться удалить столбец из таблицы, давайте например удалим из users столбец age:

ALTER TABLE users DROP age

Этот запрос MySQL удалил столбец окончательно и безвозвратно.

Добавить столбец — ALTER TABLE . ADD .

Иногда может потребоваться добавить столбец в существующую таблицу, давайте например снова добавим в таблицу users столбец age:

ALTER TABLE users ADD age TINYINT UNSIGNED

Этот запрос MySQL добавил столбец age с типом данных TINYINT UNSIGNED .

Переименование столбца — ALTER TABLE . CHANGE .

Иногда может потребоваться переименовать столбец, например столбец age переименовать в vozrast. Делаем это так:

ALTER TABLE users CHANGE age vozrast TINYINT UNSIGNED

Этот запрос MySQL переименовал столбец age в vozrast с типом данных TINYINT UNSIGNED .

Переименование таблицы — RENAME TABLE . TO .

Иногда может потребоваться переименовать таблицу:

RENAME TABLE users TO peoples

Удаление базы данных — DROP DATABASE

Этот запрос может удалить базу данных с имененм tester:

Илон Маск рекомендует:  Что такое код cpdf_rotate_text

DROP DATABASE tester

У меня на денвере этот запрос работает, но на хостинге может и не сработать, если у пользователя базы данных нет прав на выполнение удаления.

Создание базы данных — CREATE DATABASE

Этот запрос создаёт базу данных с имененм tester:

CREATE DATABASE tester

У меня на денвере этот запрос работает, но на хостинге может и не сработать, если у пользователя базы данных нет прав на выполнение удаления.

Итоги

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

Некоторые запросы обычно делают только из phpMyAdmin (создание и удаление баз данных например).

В работе сайтов обычно нужно добавить запись в таблицу, редактировать запись или удалить запись из таблицы.

Следующим шагом будет изучение типов данных в MySQL.

ИнтеллигенцияX

Простая база данных на PHP и MySQL

Сделал на PHP для себя простенькую базу событий с напоминалкой о них на e-mail. Вполне сойдет как пример для работы в PHP с базой данных.

В качестве базы данных конечно MySQL.

Таблички можно создать вручную через phpMyAdmin, как описано в примере создания опроса на PHP здесь https://ds-release.ru/kak-sdelat-formu-dlya-oprosa-na-php/, но здесь таблички я буду создавать с помощью запросов.

Файл для создания таблиц create.php (его запускаем 1 раз, потом удаляем после создания таблиц).

Форма регистрации пользователя add.php

Заносим в базу логин и пароль add1.php

Теперь форма ввода логина и пароля login.php

После правильного ввода логина и пароля отображаем список событий see.php

Под табличкой событий форма для ввода нового события и кнопка Добавить, при нажатии на нее открывается seeadd.php, событие добавляется и снова отображается табличка с новым событием и форма ввода. Чтобы все корректно заносилось, надо обратить внимание на формат даты и кодировку.

В табличке у нас кнопка Изменить открывает change.php с формой изменения введенной ранее записи.

Изменяем событие, и нажимаем Сохранить, после чего открывается seechange.php, новая информации о событии сохраняется.

Снова отображается табличка с измененным событием и форма ввода.
Файл prover.php, который ставится в cron, и по времени проверяет базу на предмет просроченного событий, если находит — высылает на e-mail пользователя напоминание.

И напоследок, форма, которая высылает забытый пароль пользователю на e-mail.
Форма ввода логина для напоминания забытого пароля, , файл forgot.php.

При нажатии на кнопку «Выслать» запускается файл forgot1.php, который высылает пароль на e-mail пользователя.

В результате получается вот такая простая база данных по событиям с функцией уведомления о событиях на e-mail пользователя:

Дополнительно список событий можно оформить в виде таблички, еще можно добавить кнопку «Удалить» в таблицу для удаления строк, сделать возможность «закрывать» события, нажимая на ссылку сразу в письме с напоминанием, сделать какое-нибудь шифрование пароля, который передается через адресную строку.

А так можно представленные выше куски кода вставить в шаблоны страниц, чтобы красиво было, залить на сайт и будет он-лайн напоминалка о событиях на e-mail.


ГЛАВА 11. PHP и базы данных

Средства эффективного хранения и выборки больших объемов информации внесли огромный вклад в успешное развитие Интернета. Обычно для хранения информации используются базы данных. Работа таких известных сайтов, как Yahoo, Amazon и Ebay, в значительной степени зависит от надежности баз данных, хранящих громадные объемы информации. Конечно, поддержка баз данных ориентирована не только на интересы гигантских корпораций — в распоряжении web-программистов имеется несколько мощных реализаций баз данных, распространяемых по относительно низкой цене (а то и бесплатно).

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

Глава начинается с подробного описания выборки и обновления данных в MySQL — вероятно, самой популярной СУБД, используемой в PHP ( http://www.mysql.com ). На примере MySQL будет показано, как в PHP происходят загрузка и обновление данных в базе; мы рассмотрим базовые средства поиска и сортировки, используемые во многих web-приложениях. Затем мы перейдем к реализованной в PHP поддержке ODBC (Open Data Base Connectivity) — обобщенного интерфейса, который может использоваться для одновременного соединения с разными СУБД. Поддержка ODBC в PHP будет продемонстрирована на примере соединения и выборки данных из базы данных Microsoft Access. Глава завершается проектом, в котором PHP и СУБД MySQL используются для создания иерархического каталога с информацией об избранных сайтах. При включении в каталог новых сайтов пользователь относит их к одной из стандартных категорий, определяемых администратором сайта.

Прежде чем переходить к обсуждению MySQL, я хочу сказать несколько слов об SQL — самом распространенном языке для работы с базами данных. Язык SQL заложен в основу практически всех существующих СУБД. Чтобы перейти к рассмотрению примеров работы с базами данных, необходимо хотя бы в общих чертах представлять, как работает SQL.

Что такое SQL?

SQL обычно описывается как стандартный язык, используемый для взаимодействия с реляционными базами данных (см. ниже). Однако SQL не является языком программирования, как С, C++ или PHP. Скорее, это интерфейсное средство для выполнения различных операций с базами данных, предоставляющее в распоряжение пользователя стандартный набор команд. Возможности SQL не ограничиваются выборкой данных из базы. В SQL поддерживаются разнообразные возможности для взаимодействия с базой данных, в том числе:

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

Обратите внимание: в определении SQL было сказано, что этот язык предназначен для работы с реляционными базами данных. В реляционных СУБД данные организуются в виде набора взаимосвязанных таблиц. Связи между таблицами реализуются в виде ссылок на данные других таблиц. Таблицу можно представить себе как двухмерный массив, в котором расположение каждого элемента характеризуется определенными значениями строки и столбца. Пример реляционной базы данных изображен на рис. 11.1.

Рис. 11.1. Пример реляционной базы данных

Как видно из рис. 11.1, каждая таблица состоит из строк (записей) и столбцов (полей). Каждому полю присваивается уникальное (в рамках данной таблицы) имя. Обратите внимание на связь между таблицами customer и orders, обозначенную стрелкой. В информацию о заказе включается короткий идентификатор клиента, что позволяет избежать избыточного хранения имени и прочих реквизитов клиента. В изображенной базе данных существует еще одна связь — между таблицами orders и products. Эта связь устанавливается по полю prod_id, в котором хранится идентификатор товара, заказанного данным клиентом (определяемого полем custjd). Наличие этих связей позволяет легко ссылаться на полные данные клиента и товара по простым идентификаторам. Правильно организованная база данных превращается в мощное средство организации и эффективного хранения данных с минимальной избыточностью. Запомните эту базу данных, я буду часто ссылаться на нее в дальнейших примерах.

Итак, как же выполняются операции с реляционными базами данных? Для этого в SQL существует специальный набор общих команд — таких, как SELECT, INSERT, UPDATE и DELETE. Например, если вам потребуется получить адрес электронной почты клиента с идентификатором 2001cu (см. рис. 11.1), достаточно выполнить следующую команду SQL:

SELECT cust_email FROM customers WHERE custjd = ‘2001cu’

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

SELECT имя_поля FROM имя_таблицы [ WHERE условие ]

Квадратные скобки означают, что завершающая часть команды является необязательной. Например, для получения адресов электронной почты всех клиентов из таблицы customers достаточно выполнить следующий запрос:

SELECT cust_email FROM customers

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

INSERT into products VALUES (‘1009pr’, ‘Red Tomatoes’, ‘1.43’);

Если позднее эти данные потребуется удалить, воспользуйтесь следующей командой:

DELETE FROM products WHERE prod_ >

Существует много разновидностей команд SQL, и полное их описание выходит за рамки этой книги. На эту тему вполне можно написать отдельную книгу! Я постарался сделать так, чтобы команды SQL, используемые в примерах, были относительно простыми, но достаточно реальными. В Web существует много учебной информации и ресурсов, посвященных SQL. Некоторые ссылки приведены в конце этого раздела.

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

Раз вы читаете эту книгу, вероятно, вас интересует вопрос, как же организуется работа с базами данных в среде Web? Как правило, сначала при помощи какого-

либо интерфейсного языка (PHP, Java или Perl) создается соединение с базой данных, после чего программа обращается к базе с запросами, используя стандартный набор средств. Интерфейсный язык можно рассматривать как своего рода «клей», связывающий базу данных с Web. Я перехожу к своему любимому интерфейсному языку — PHP.

Ниже перечислены некоторые ресурсы Интернета, посвященные SQL. Они пригодятся как новичкам, так и опытным программистам.

Поддержка баз данных в PHP

Если бы мне предложили назвать самый важный аспект PHP, вероятно, я бы остановился на поддержке баз данных. В PHP реализована обширная поддержка практически всех существующих серверов баз данных, в том числе:

PostgreSQL

Oracle (OCI7 и OC18)

Как показывает этот список, поддержка баз данных в PHP простирается от совместимости с базами данных, известных всем (например, Oracle), до тех, о которых многие даже не слышали. Мораль — если вы собираетесь использовать серьезную СУБД для хранения информации, распространяемой через Web, скорее всего, эта база данных поддерживается в PHP. Поддержка базы данных в PHP представлена набором стандартных функций для соединения с базой, обработки запросов и разрыва связи.

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

MySQL

MySQL ( http://www.mysql.com ) — надежная СУБД на базе SQL, разработанная и сопровождаемая фирмой Т.с.Х DataKonsultAB (Стокгольм, Швеция). Начиная с 1995 года, MySQL стала одной из самых распространенных СУБД в мире, что отчасти обусловлено ее скоростью, надежностью и гибкой лицензионной политикой (см. ниже).

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

MySQL распространяется на условиях общей лицензии GNU (GPL, GNU Public License). Полное описание текущей лицензионной политики MySQL приведено на сайте MySQL ( http://www.mysql.com ).

Установка

Одна из причин популярности MySQL среди пользователей PHP заключается в том, что поддержка этого сервера автоматически включается в поставку PHP. Таким образом, вам остается лишь проследить за правильной установкой пакета MySQL СУБД MySQL совместима практически с любой серьезной операционной системой, включая FreeBSD, Solaris, UNIX, Linux и различные верии Windows. Хотя лицензионная политика MySQL отличается большей гибкостью в сравнении с другими серверами баз данных, я настоятельно рекомендую ознакомиться с лицензионной информацией, размещенной на сайте MySQL ( http://www.mysql.com ).

Последнюю версию MySQL можно принять с любого зеркального сайта. Полный список зеркальных сайтов приведен по адресу http://www.mysql.com/downloads/ mirrors.html. На момент написания книги последняя стабильная версия MySQL имела номер 3.22.32, а версия 3.32 находилась на стадии бета-тестирования. Конечно, всегда следует устанавливать последнюю стабильную версию, это в ваших интересах. Посетите ближайший «зеркальный» сайт и загрузите версию, соответствующую вашей операционной системе. В верхней части страницы расположены ссылки на новые версии для различных платформ. Обязательно прочитайте всю страницу, поскольку она завершается ссылками для некоторых специфических ОС.

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

Настройка MySQL

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

На первый взгляд, таблицы привилегий MySQL выглядят устрашающе, но если в них как следует разобраться, дальнейшее сопровождение становится очень простой задачей. Полное описание таблиц привилегий выходит за рамки этой книги. Впрочем, в Web существует немало ресурсов, предназначенных для помощи начинающим пользователям MySQL. За дополнительной информацией обращайтесь на сайт MySQL ( http://www.mysql.com ).

После успешной установки и настройки пакета MySQL можно начинать эксперименты с базами данных в среде Web! Именно этой теме и посвящен следующий раздел. Начнем с изучения поддержки MySQL в PHP.

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

Итак, вы успешно создали и протестировали все необходимые разрешения; все готово для работы с сервером MySQL. В этом разделе я представлю стандартные функции PHP, при помощи которых вы сможете легко организовать взаимодействие сценариев PHP с сервером MySQL. Общая последовательность действий при взаимодействии с сервером MySQL выглядит так:

  1. Установить соединение с сервером MySQL. Если попытка завершается неудачей, вывести соответствующее сообщение и завершить процесс.
  2. Выбрать базу данных сервера MySQL. Если попытка выбора завершается неудачей, вывести соответствующее сообщение и завершить процесс. Допускается одновременное открытие нескольких баз данных для обработки запросов.
  3. Обработать запросы к выбранной базе (или базам).
  4. После завершения обработки запросов закрыть соединение с сервером баз данных.

В примерах этого раздела используются таблицы products, customers и orders (см. рис. 11.1). Если вы захотите самостоятельно проверить все примеры, создайте эти таблицы или скопируйте страницу с описанием структуры, чтобы вам не приходилось постоянно листать книгу.

Итак, начнем с самого начала — то есть с подключения к серверу MySQL.

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

int mysql_connect ([string хост [:порт] [:/путь//к/сокету] [, string имя пользователя] [, string пароль])

В параметре хост передается имя хостового компьютера, указанное в таблицах привилегий сервера MySQL. Конечно, оно же используется для перенаправления запросов на web-сервер, на котором работает MySQL, поскольку к серверу MySQL можно подключаться в удаленном режиме. Наряду с именем хоста могут указываться необязательные параметры — номер порта, а также путь к сокету (для локального хоста). Параметры имя_пользователя и пароль должны соответствовать имени пользователя и паролю, заданным в таблицах привилегий MySQL. Обратите внимание: все параметры являются необязательными, поскольку таблицы привилегий можно настроить таким образом, чтобы они допускали соединение без проверки. Если параметр хост не задан, mysql_connect( ) пытается установить связь с локальным хостом.

Пример открытия соединения с MySQL:

@mysql_connect(» local host», «web», «4tf9zzzf») or die(«Could not connect to MySQL server!»);

В данном примере localhost — имя компьютера, web— имя пользователя, а 4tf9zzzf — пароль. Знак @ перед вызовом функции mysql_connect( ) подавляет все сообщения об ошибках, выдаваемые при неудачной попытке подключения, — они заменяются сообщением, указанным при вызове die( ). Обратите внимание: значение, возвращаемое при вызове rnysql_connect( ), в данном примере не используется. Если в программе используется всего одно соединение с сервером MySQL, это вполне нормально. Но если программа устанавливает соединения с несколькими серверами MySQL на разных хостах, следует сохранить идентификатор соединения, возвращаемый при вызове mysql_connect( ), чтобы адресовать последующие команды нужному серверу MySQL. Пример:

Идентификаторы $link1 и $link2 передаются при последующих обращениях к базам данных с запросами. Вскоре вы узнаете, как именно адресовать запрос нужному серверу при помощи идентификатора соединения.

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

После успешного соединения с MySQL необходимо выбрать базу данных, находящуюся на сервере. Для этого используется функция mysql_select_db( ). Синтаксис функции mysql_select_db( ):

int mysql_select_db (string имя_базы_данных [, int идентификатор_соединения])

Параметр имя_базы_данных определяет выбираемую базу данных, идентификатор

которой возвращается функцией mysql_select_db( ). Обратите внимание: параметр

идентификатор_соединения необязателен лишь при одном открытом соединении с

сервером MySQL. При наличии нескольких открытых соединений этот параметр

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

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

После завершения работы с сервером MySQL соединение необходимо закрыть. Функция mysql_close( ) закрывает соединение, определяемое необязательным параметром. Если параметр не задан, функция mysql_close( ) закрывает последнее открытое соединение. Синтаксис функции mysql_close( ):

int mysql_close ([int идентификатор_соединения])

Пример использования mysql_close( ):

В этом примере указывать идентификатор соединения не нужно, поскольку на момент вызова mysql_close( ) существует лишь одно открытое соединение с сервером.

Соединения, открытые функцией mysql_pconnect( ), закрывать не обязательно.

Функция mysql_query( ) обеспечивает интерфейс для обращения с запросами к базам

данных. Синтаксис функции mysql_query( ):

int mysql_query (string запрос [, int идентификатор_соединения])

Параметр запрос содержит текст запроса на языке SQL. Запрос передается либо соединению, определяемому необязательным параметром идентификатор_соедине-ния, либо, при отсутствии параметра, последнему открытому соединению.

Неопытные программисты часто ошибочно думают, что функция mysql_query( ) возвращает результаты обработки запроса. Это не так — в зависимости от типа запроса вызов mysql_query( ) может приводить к разным последствиям. При успешном выполнении команды SQL SELECT возвращается идентификатор результата, который впоследствии передается функции mysql_result( ) для последующего форматирования и отображения результатов запроса. Если обработка запроса завершилась неудачей, функция возвращает FALSE. Функция mysql_result( ) описана в одном из следующих разделов. Количество записей, участвующих в запросе, определяется при помощи функции mysql_num_rows( ). Эта функция также описана далее.

Учитывая сказанное, я приведу примеры использования mysql_query( ) лишь после описания функций mysql_result( ) и mysql_affected_rows( ).

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

Во многих ситуациях требуется узнать количество записей, участвующих в запросе SQL с командами INSERT, UPDATE, REPLACE или DELETE. Задача решается функцией mysql_affected_rows( ). Синтаксис функции:

int mysql_affected_rows ([int идентификатор_соединения])

Обратите внимание: параметр идентификатор_соединения не является обязательным. Если он не указывается, mysql_affected_rqws( ) пытается использовать последнее открытое соединение. Пример:

// Выполнить запрос $result = mysql_query($query);

// Определить количество обновленных записей

print «Total row updated; «.mysql_affected_rows( );

При выполнении этого фрагмента будет выведен следующий результат:

Total row updated: 1

Функция mysql_affected_rows( ) не работает с запросами, основанными на команде SELECT. Для определения количества записей, возвращенных при вызове SELECT, используется функция mysql_num_rows( ), описанная в следующем разделе.

В одной специфической ситуации функция mysql_affected_rows( ) работает с ошибкой. При выполнении команды DELETE без секции WHEREmysql_affected_rows( ) всегда возвращает 0.

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

int mysql_num_rows(int результат)

Пример использования mysql_num_rows( ):

Поскольку таблица содержит лишь один товар, название которого начинается с буквы р (pears), возвращается только одна запись. Результат:

Total rows selected: 1

Функция mysql_result() используется в сочетании с mysql_query( ) (при выполнении запроса с командой SELECT) для получения набора данных. Синтаксис функции mysql_resu1t():

int mysql_result (int идентификатор_результата, int запись [. mixed поле»]’)

В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query( ). Параметр запись ссылается на определенную запись набора данных, определяемого параметром идентификатор_результата. Наконец, в необязательном параметре поле могут передаваться:

  • смещение поля в таблице;
  • имя поля;
  • имя поля в формате имя_поля_имя_тдблицы.

В листинге 11.1 используется база данных, изображенная на рис. 11.1.

Листинг 11.1. Выборка и форматирование данных в базе данных MySQL

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

Листинг 11.2. Результат выполнения листинга 11.1

Product ID Product Name Product Price

1000pr

apples

1001pr

oranges

1002pr

bananas

1003pr

pears

Функция mysql_result( ) удобна для работы с относительно небольшими наборами данных, однако существуют и другие функции, работающие намного эффективнее, — а именно, функции mysql_fetch_row( ) и mysql_fetch_array( ). Эти функции описаны в следующих разделах.

Обычно гораздо удобнее сразу присвоить значения всех полей записи элементам индексируемого массива (начиная с индекса 0), нежели многократно вызывать mysql_result( ) для получения отдельных полей. Задача решается функцией mysql_fetch_row( ), имеющей следующий синтаксис:

array mysql_fetch_row (int результат)

Использование функции list( ) в сочетании с mysql_fetch_row( ) позволяет сэкономить несколько команд, необходимых при использовании mysql_result( ). В листинге 11.3 приведен код листинга 11.1, переписанный с использованием list( ) и mysql_fetch_row( ).

Листинг 11.3. Выборка данных функцией mysql_fetch_row( )

Листинг 11.3 выдает тот же результат, что и листинг 11.1, но использует при этом меньшее количество команд.

my sq l_f etch_array ( )

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

array mysql_fetch_array (int идентификатор результата [, тип_индексации])

В параметре идентификатор_результата передается значение, возвращенное функцией mysql_query( ). Необязательный параметр тип_индексации принимает одно из следующих значений:

  • MYSQL_ASSOC — функция mysql_fetch_array( ) возвращает ассоциативный массив. Если параметр не указан, это значение используется по умолчанию;
  • MYSQL_NUM — функция mysql_fetch_array( ) возвращает массив с числовой индексацией;
  • MYSQL_BOTH — к полям возвращаемой записи можно обращаться как по числовым, так и по ассоциативным индексам.

Листинг 11.4 содержит очередной вариант кода листингов 11.1 и 11.3. На этот раз используется функция mysql_fetch_array( ), возвращающая ассоциативный массив полей.

Листинг 11.4. Выборка данных функцией mysql_fetch_array( )

Листинг 11.4 выдает тот же результат, что и листинги 11.1 и 11.3.

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

Пример простейшей поисковой системы на PHP

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

Поисковая система, приведенная в листинге 11.5, предназначена для поиска информации о клиентах. В форме пользователь вводит ключевое слово и выбирает категорию (имя, идентификатор или адрес электронной почты клиента), в которой будет производиться поиск. Если введенное пользователем имя, идентификатор или адрес существует, поисковая система извлекает из базы данных остальные атрибуты. Затем по идентификатору покупателя из таблицы orders выбирается

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

Листинг 11.5. Простейшая поисковая система (searchengine.php)

Customer Information:

print «Identification #: $id
«;

Order History:

// Построить и выполнить запрос к таблице ‘orders’

$query = «SELECT order_id, prod_id, quantity

FROM orders WHERE cust_

ORDER BY quantity DESC»;

print »

0rder ID Product ID Quantity

«;

// Отформатировать и вывести найденные записи.

print »

«;

print »

$order_id $prod_id $quantity

«;

print «

«;

print «

«;

Если ввести ключевое слово Mi 1 апо и выбрать в раскрывающемся списке категорию Customer Name (Имя клиента), программа выводит следующую информацию:

Order Id Product Id Quantity
100003 1000pr 12
100005 1002pr 11

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

Сортировка таблиц

При выводе данных из базы необходимо предусмотреть возможность их сортировки по различным критериям. В качестве примера рассмотрим результаты, выведенные нашей поисковой системой, — обратим особое внимание на следующие после заголовка Order History: (История заказов). Допустим, список получился очень длинным, и вы хотите отсортировать данные по идентификатору товара (или идентификатору заказа). Чтобы вы лучше поняли, о чем идет речь, рекомендую посетить один из моих любимых сайтов, http://download.cnet.com. Если в процессе просмотра программ конкретной категории щелкнуть на заголовке столбца (название, дата размещения, количество загрузок или размер файла), то список автоматически упорядочивается по содержимому указанного столбца. Далее показано, как реализовать подобную возможность.

В листинге 11.6 мы производим выборку данных из таблицы orders. По умолчанию данные сортируются по убыванию объема заказа (поле quantity). Однако щелчок на любом заголовке таблицы приводит к тому, что страница загружается заново с упорядочением таблицы по указанному столбцу.

Листинг 11.6. Сортировка таблиц (tablesorter.php)

// Создать заголовок таблицы

// Отформатировать и вывести каждую строку таблицы

while (list($order_id,$cust_id,$prod_id, $quantity)

print »

«;

print »

$order_id $cust_id $prod_id

$quantity

«;

print «

«;

print «

«;

Для базы данных company, изображенной на рис. 11.1, стандартные выходные данные листинга 11.6 выглядят следующим образом:

Order ID Customer ID Product ID Quantity
2000cu 1000pr 12
2000cu 1002pr 11
2000cu 1000pr 9
2000cu 1001pr 5
2000cu 1002pr 3

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

Order ID Customer ID Product ID Quantity
2000cu 1002pr 11
2000cu 1000pr 9
2000cu 1000pr 12
2000cu 1001pr 5
2000cu 1002pr 3

Сортировка выходных данных приносит огромную пользу при форматировании баз данных. Простая модификация запроса SELECT позволяет упорядочить данные по любому критерию — по возрастанию, по убыванию или с группировкой записей.

На этом наше знакомство с MySQL подходит к концу. Учтите, что материал этой главы отнюдь не исчерпывает всего, что необходимо знать о MySQL. Полный список команд MySQL в PHP приведен в документации ( http://www.php.net/manuat ).

Специализированные функции хорошо подходят для работы с одним конкретным типом СУБД. Но что делать, если вам приходится подключаться к MySQL, Microsoft SQL Server и IBM DB2, притом в одном приложении? Аналогичная проблема возникает при разработке приложений, которые не должны зависеть от СУБД; такие приложения работают «над» существующей инфраструктурой клиентской базы данных. ODBC (сокращение от «Open Database Connectivity», то есть «открытая архитектура баз данных») представляет собой интерфейс прикладных программ (API), позволяющий использовать общий набор абстрактных функций для работы с разными типами баз данных. Преимущества подобного подхода очевидны — вам не придется многократно переписывать один и тот же фрагмент кода только для того, чтобы выполнять одинаковые операции с разнотипными базами данных.

Работа с сервером баз данных через ODBC возможна лишь в том случае, если этот сервер является ODBC-совместимым. Другими словами, для него должны существовать драйверы ODBC. За дополнительной информацией о драйверах ODBC обращайтесь к документации СУБД. Возможно, вам придется дополнительно загрузить их из Интернета и установить на своем компьютере. Хотя стандарт ODBC, разработанный компанией Microsoft, стал открытым стандартом, он в основном используется для работы с СУБД на платформе Windows; впрочем, драйверы ODBC также существуют и на платформе Linux. Ниже приведены ссылки на драйверы для некоторых популярных СУБД.

Драйверы ODBC различаются по целям, платформе и назначению. За информацией о различных аспектах работы с этими драйверами обращайтесь к документации по конкретным пакетам. Впрочем, невзирая на все различия, использование этих драйверов в PHP обходится без проблем.

Когда вы определите, какой комплект драйверов ODBC лучше подходит для ваших целей, загрузите его и выполните все инструкции по установке и настройке. После этого можно переходить к следующему разделу — «Поддержка ODBC в PHP».

Поддержка ODBC в PHP

Функции ODBC в PHP, обычно называемые общими функциями ODBC, не только обеспечивают типовую поддержку ODBC, но и позволяют работать с некоторыми СУБД, обладающими собственным API, через стандартный ODBC API. К числу последних относятся следующие СУБД:

Обратите внимание: при работе с перечисленными СУБД стандартный механизм ODBC на самом деле не используется. Просто поддерживаемые в PHP общие функции ODBC применяются для взаимодействия с базами данных. Это удобно, поскольку при переходе на другую ODBC-совместимую СУБД (или СУБД из приведенного выше списка) все ваши сценарии будут нормально работать.

Поддержка ODBC встроена в комплект поставки PHP, поэтому вам за редкими исключе-ниями практически не придется заниматься специальной настройкой.

В настоящее время существует около 40 общих функций ODBC. Впрочем, для выборки информации из ODBC-совместимой базы данных вполне достаточно нескольких функций, описанных ниже. Полный список общих функций ODBC в PHP приведен в документации (http://www.php.net/manual).

Перед тем как обращаться к ODBC-совместимой базе данных с запросами, необходимо сначала установить с ней связь. Соединение создается функцией ocbc_connect( ). Синтаксис функции odbc_connect( ):

int odbc_connect (string источник_данных, string имя_пользователя, string пароль [, int тип_курсора])

Параметр источник_данных определяет ODBC-совместимую базу данных, с которой вы пытаетесь установить связь. В параметрах имя_пользователя и пароль, как нетрудно догадаться, передаются имя пользователя и пароль, необходимые для подключения к источнику данных. Необязательный параметр тип_курсора предназначе’н для устранения проблем, возникающих при работе с некоторыми драйверами ODBC. Он может принимать одно из четырех возможных значений:

  • SQL_CUR_USE_IF_NEEDED;
  • SQL_CURSOR_USE_ODBC;
  • SQL_CUR_USE_DRIVER;
  • SQL CUR DEFAULT.

Возможно, вам не придется использовать этот параметр, но все же о нем следует помнить на случай, если ваш пакет ODBC не справится с обработкой того или иного запроса.

Использовать odbc_connect( ) в программе несложно. Пример:

Функция используется для открытия восстанавливаемых (persistent) соединений с базами данных. Она экономит системные ресурсы, поскольку odbc_pconnect( ) проверяет, не было ли данное соединение открыто ранее, и если было, использует предыдущее соединение.

После завершения работы с ODBC-совместимой базой данных соединение необходимо закрыть, чтобы освободить все ресурсы, используемые открытым соединением. Соединение закрывается функцией odbc_close( ):

void odbc_close ([int идентификатор_соединения])

В параметре идентификатор_соединения передается идентификатор открытого соединения. Рассмотрим небольшой пример:

Перед непосредственной обработкой запрос необходимо «подготовить». Задача решается функцией odbc_prepare( ):

int odbc_prepare (int идентификатор_соединения , string запрос)

В параметре идентификатор_соединения передается идентификатор соединения, возвращаемый функцией odbc_connect( ). В параметре запрос передается текст запроса, который должен быть выполнен сервером. Если запрос не может быть выполнен, функция возвращает FALSE; в противном случае возвращается идентификатор результата, в дальнейшем используемый при вызове функции odbc_execute( ) (см. ниже).

Запрос, подготовленный функцией odbc_prepare( ), выполняется функцией odbc_execute( ). Синтаксис функции odbc_execute( ):

int odbc_execute (int идентификатор результата [, array параметры])

В параметре идентификатор_результата передается идентификатор результата, возвращаемый при успешном вызове odbc_prepare( ). Необязательный параметр передается лишь в том случае, если при вызове функции передаются дополнительные данные.

Рассмотрим следующий пример:

В приведенном примере продемонстрирована транзакция ODBC, при которой данные запроса не отображаются в браузере (как это обычно делается при использовании команды SELECT). Транзакция ODBC с использованием запроса QUERY описана ниже, в разделе «odbc_result_all( )».

Функция odbc_exec( ) объединяет odbc_prepare( ) и odbc_execute( ). Синтаксис функции odbc_exec( ):

int odbc_exec (int идентификатор_соединения , string запрос)

В параметре идентификатор_соединения передается идентификатор соединения, возвращаемый функцией odbc_connect( ). В параметре запрос передается текст запроса, который должен быть выполнен сервером. Если запрос не может быть выполнен, функция возвращает FALSE; в противном случае возвращается идентификатор результата, используемый при последующих вызовах функций:

В этом примере функция odbc_exec( ) пытается выполнить запрос, текст которого содержится в переменной $query. При успешном выполнении переменной $result присваивается идентификатор результата; в случае неудачи ей присваивается значение FALSE и выводится сообщение, передаваемое при вызове die( ).

Очень удобная функция odbc_result_all( ) форматирует и отображает все записи для идентификатора результата, полученного при вызове odbc_exec( ) или odbc_execute( ). Синтаксис функции odbc_result_all( ):

int odbc_result_all (int идентификатор_результата [, string формат_таблицы])

В параметре идентификатор_результата передается идентификатор результата, возвращаемый при успешном вызове odbc_exec( ) или odbc_execute( ). В необязательном параметре формат_таблицы передаются характеристики таблицы HTML. Рассмотрим следующий пример:

В результате выполнения этого примера содержимое таблицы customers будет выведено в таблице на светло-сером фоне с рамкой толщиной 1. Внешний вид таблицы для данных, приведенных на рис. 11.1, изображен на рис. 11.2.

Рис. 11.2. Данные ODBC в браузере

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

int odbc_free_result (int идентификатор_результата)

В параметре функции передается идентификатор результата, который больше не будет использоваться в программе. Следует помнить, что все ресурсы памяти автоматически освобождаются по завершении сценария; таким образом, вызов функции odbc_free_result( ) необходим лишь для очень больших запросов, расходующих очень большие объемы памяти. Ниже приведен пример, демонстрирующий применение odbc_free_result( ). Помните, что без этой функции обычно можно обойтись, если только вы не собираетесь выполнять несколько запросов в одном сценарии, поскольку с завершением сценария вся память будет автоматически освобождена.


После того как функция odbc_result_all( ) завершила использование идентификатора результата, память возвращается в систему при помощи odbc_free_result( ).

На этом завершается наше знакомство с функциями ODBC в PHP, незаменимыми при создании простых интерфейсов на базе ODBC для доступа через Web. В следующем разделе многие из этих функций будут использованы для демонстрации того, как легко на базе PHP организуется взаимодействие с одной из самых популярных СУБД — Microsoft Access.

Microsoft Access и PHP

Популярность СУБД Microsoft Access ( http://www.microsoft.com/office/access ) отчасти объясняется ее удобным графическим интерфейсом. Помимо использования Access в качестве самостоятельной СУБД, вы можете использовать ее графический интерфейс для организации работы с другими базами данных — например, MySQL или Microsoft SQL Server.

Чтобы продемонстрировать поддержку ODBC в PHP, я опишу процесс подключения к базам данных Microsoft Access на PHP. Делается это на удивление просто, но благодаря популярности Microsoft Access это станет полезным дополнением в вашем творческом арсенале. Я опишу этот процесс шаг за шагом:

  1. Создайте базу данных Access. Предполагается, что вы уже умеете это делать, а если не умеете, но все равно хотите проследить за выполнением этого примера, — воспользуйтесь услугами программы-мастера. Я создал стандартную базу данных для хранения контактных данных при помощи мастера. Обязательно создайте в таблице несколько записей и запомните имя таблицы, оно нам вскоре понадобится!
  2. Сохраните базу данных на своем компьютере.
  3. На следующем шаге мы организуем доступ к базе Access средствами ODBC. Выполните команду Пуск > Настройка > Панельуправления (Start > Settings > Control Panel). Найдите на панели управления значок Источники данных ODBC (32) (ODBC Data Sources (32 bit)). При помощи этого значка запускается Администратор ODBC, предназначенный для настройки различных драйверов и источников данных в вашей системе. Запустите программу, дважды щелкнув на этом значке. Окно Администратора по умолчанию открывается на вкладке Пользовательский DSN (User DSN). На этой вкладке перечисляются источники данных-, которые относятся к конкретному пользователю и могут использоваться только на этом компьютере. В данном примере будет использоваться именно такой источник данных.
  4. Нажмите кнопку Добавить. (Add. ) в правой части окна. Открывается новое окно для выбора драйвера, предназначенного для работы с новым источником. Выберите строку Microsoft Access Driver (*.mdb) и нажмите кнопку Finish (Готово).
  5. На экране появляется новое окно Установка драйвера ODBC для Microsoft Access (ODBC Microsoft Access Setup). Найдите в форме текстовое поле Имя источника данных (Data Source Name) и введите в нем имя созданной вами базы данных Access. При желании можете ввести описание в текстовом поле, расположенном непосредственно под полем Имя источника данных.
  6. Нажмите кнопку Выбрать. (Select. ) — появляется окно в стиле Проводника Windows. В нем вам предлагается найти базу данных, доступ к которой будет осуществляться средствами ODBC.
  7. Найдите в дереве каталогов свою базу данных и дважды щелкните на ней. Вы снова возвращаетесь к окну Установка драйвера ODBC для Microsoft Access. Путь к выбранной базе данных отображается над кнопкой Выбрать. Нажмите кнопку ОК.
  8. Готово! Теперь вы можете работать с базой данных Access средствами ODBC.

Все, что вам остается сделать — создать сценарий, в котором вы будете работать с базой данных через ODBC. В приведенном ниже сценарии общие функции ODBC (см. выше) будут использоваться для вывода всей информации из таблицы контактов, созданной при помощи мастера Access. Однако перед рассмотрением сценария желательно знать, как таблица Contacts выглядит в Access (рис. 11.3).

Рис. 11.3. Таблица Contacts в MS Access

Теперь вы знаете, какая информация будет извлекаться из базы данных, и мы можем перейти к сценарию. Если вы забыли, что делает та или иная функция, обращайтесь к описанию в начале этой главы. Результаты работы листинга 11.7 представлены на рис. 11.4.

Листинг 11.7. Применение функций ODBC для работы с MS Access

Не правда ли, все просто? А самое замечательное — то, что этот сценарий полностью совместим с любой другой СУБД с поддержкой ODBC. Для тренировки попробуйте повторить все описанные действия для другой СУБД, запустите сценарий — и вы получите те же результаты, которые изображены на рис. 11.4.

Рис. 11.4. Содержимое таблицы Contacts в web-браузере

Проект: Каталог ссылок на PHP

Самый простой способ наполнить ваш сайт реальным содержанием — дать пользователю возможность сделать это за вас. Конечно, для ввода данных удобнее всего воспользоваться формой HTML.

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

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

mysql>create table bookmarks ( category INT, site_name char(35), url char(50),

date_added date, description char(254) );

В определении таблицы bookmarks имеется пара моментов, заслуживающих внимания. Во-первых, информация о категории сайта почему-то хранится в виде целого числа но разве не правильнее было бы сделать названия категорий более содержательными и понятными для пользователя? Не беспокойтесь, в ини-циализационном файле будет создан массив, связывающий целочисленные индексы с названиями категорий. В будущем администратор может изменять и даже удалять отдельные категории. Хранение информации о категориях заметно упрощает эту задачу. Кроме того, целочисленное поле обеспечивает экономию места на диске, поскольку название категории многократно сохраняется в таблице. Другое обстоятельство, относящееся к структуре таблицы, — ограничение длины описания 254 символами. В зависимости от этого объема описаний вместо типа char( ) можно воспользоваться типом medium или text. За дополнительной информацией о типах полей обращайтесь к документации MySQL.

Следующим шагом в работе над этим приложением будет создание инициализа-ционного файла. Помимо глобальных переменных, в инициализационном файле определяются две функции: add_bookmark( ) и view_bookmark( ). Функция add_bookmark( ) получает пользовательский ввод из формы и включает его в базу. Функция view_bookmark( ) получает индекс категории, читает из базы данных все записи, относящиеся к указанной категории, и отображает их в браузере. Инициализацион-ный файл приложения init.inc с комментариями приведен в листинге 11.8.

Листинг 11.8. Инициализационный файл каталога ссылок (init.inc)

while ($row = mysql_fetch_array($result)) ;

Mysql пример базы данных

Создаем сайт для работы в Интернете

  1. Причины создания пошаговой инструкции по разработке самописного сайта
  2. Тема создаваемого сайта
  3. В чем будет заключаться монетизация
  4. Функционал
  5. Этапы создания
  6. Текущее состояние создаваемого сайта

Здравствуйте уважаемый посетитель!

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

Причем чтобы такой сайт был создан не в стандартном исполнении на основе какой-нибудь бесплатной СMS, а заточенный под себя, с возможностью обеспечить ему должную безопасность и реализовать все свои индивидуальные потребности.

Данный сборник статей и предназначен для того, чтобы показать на реальном примере, как можно самому с нуля создать интернет-ресурс, который в последствии можно использовать в качестве инструмента для своей работы.

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

Следует к этому добавить, что при желании, после получения необходимых знаний и навыков в вопросах сайтостроения, вполне возможно заняться и созданием сайтов на заказ. Тем более, что эта работа очень интересна и достаточно хорошо оплачиваемая. И что немаловажно, ее можно выполнять удалено, занимаясь в любое время не выходя из дома. Для этого нужно всего лишь одно условие — подключение к сети Интернет, что в наше время не является какой-либо проблемой.

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

Самописный сайт своими руками!

Здесь можно посмотреть текущее состояние самописного сайта, который создается для работы в Интернете в рамках цикла статей Как сделать сайт.

Где в дополнительных материалах можно бесплатно скачать исходные файлы сайта с таблицами MySQL.

Вы здесь: Главная → Сборник статей → Работа с базой данных MySQL

Перечень статей раздела Работа с БД MySQL:

Создаем базу данных MySQL

  • Зачем нужна база данных
  • Что из себя представляет база данных MySQL
  • Создаем базу данных на локальном веб-сервере Denwer
  • Создаем базу данных на хостинге

Здравствуйте уважаемый посетитель!

Прежде чем приступить к очередной теме создания сайта, хочу извиниться за задержку в написании статей. Но, как говорится, причина уважительная, так как связанно это было с работой по другим важным проектам. Надеюсь, в дальнейшем, дела насущные позволят мне рассмотреть все основные заявленные вопросы по развитию сайта в штатном режиме, с периодичностью 1-2 статьи в неделю.

Этой статьей начинается следующая часть сборника «Сделай сайт с нуля своими руками», которая в основном будет направлена на развитие и оптимизацию сайта, наполнение его контентом и необходимым функционалом.

А для того, чтобы в дальнейшем иметь возможность полноценно развивать сайт нам будет не обойтись без рассмотрения такого важного вопроса, как работа с базой данных MySQL (в дальнейшем для обозначения базы данных MySQL будет также встречаться аббревиатура «БД»).

В данной статье мы создадим базу данных на локальном веб-сервере Denwer и на хостинге, на котором размещен наш сайт.

Дальше, по ходу работ, будем формировать необходимые таблицы и скрипты, которые будут выполнять функцию хранения и обработки данных, получаемых при работе определенных блоков сайта.

Подключаем базу данных MySQL с использованием процедурного и объектно-ориентированного стиля MySQLi

  • Общие вопросы по подключению к БД
  • Отличие в подключении к БД на локальном веб-сервере и на хостинге
  • Подключение к базе данных с использованием процедурного интерфейса
  • Подключение к базе данных объектно-ориентированным стилем
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

Сегодня будем заниматься подключением базы данных MySQL, которую создали в прошлой статье, через PHP с помощью современного модуля MySQLi. Особенность этого расширения в том, что в отличие от устаревшего MySQL, оно поддерживается всеми актуальными версиями PHP, включая последнюю 7.0.

Причем делать это будем двумя вариантами, используя, как привычной процедурный интерфейс (наподобие функций, которые использовались в старом расширении MySQL), так и объектно-ориентированный стиль взаимодействия с MySQL.

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

Создаем таблицы MySQL c помощью phpMyAdmin, SQL-команд и в PHP

  • Определение основных параметров создаваемой таблицы
  • Создание таблицы с помощью интерфейса phpMyAdmin
  • Создание таблицы с помощью SQL-запросов
  • Создание таблицы MySQL в PHP
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

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

В данной статье будут рассмотрены три возможных способа создания таблиц MySQL, а именно: с использованием интерфейса phpMyAdmin, c помощью SQL-запросов, а также используя модуль MySQLi PHP.

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

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

При этом следует отметить, что наиболее часто из перечисленных способов используется первые два — с использованием интерфейса phpMyAdmin и c помощью SQL-запросов. Причем первый из них, на мой взгляд, более удобен для небольших таблиц. А использование SQL-запросов, наверное, можно оставить для создания более сложных, с большим количеством полей.

Третий способ — через PHP, встречается значительно реже, в основном, при необходимости создания таблиц программно, при выполнении каких-либо алгоритмов.

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

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

Вводим и копируем данные в БД MySQL с помощью phpMyAdmin

  • Ввод данных в таблицу с помощью интерфейса phpMyAdmin
  • Создание копии таблицы MySQL на локальном веб-сервера
  • Импорт таблицы MySQL в БД хостинга
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

Сегодня будем вводить данные в таблицы MySQL с использованием интерфейса phpMyAdmin на локальном веб-сервере Denwer самым простым способом, в ручную, выбирая с помощью клавиатуры необходимые поля и записывая в них нужную информацию.

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

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

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

Записываем данные MySQL с использованием SQL-запросов

  • Формирование SQL-запроса
  • Выполнение SQL-запроса в phpMyAdmin
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

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

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

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

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

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

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

Поэтому, все рассматриваемые здесь способы записи данных хороши каждый по-своему, и каждый способ в какой-то момент может быть использован при работе с базой данных MySQL.

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

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

Записываем данные MySQL с использованием PHP

  • Записываем данные одной строки в таблицу MySQL
  • Составляем PHP-скрипт для записи всех строк таблицы
  • Составляем отдельную функцию записи данных в таблицу url_php
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

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

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

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

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

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

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

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

Выводим данные из БД MySQL с помощью SQL-запросов

  • Выборка одиночной уникальной строки с заданным условием
  • Получение набора нескольких строк с сортировкой по заданному полю

Здравствуйте уважаемый посетитель!

В предыдущих статьях мы рассмотрели возможность записи данных в БД MySQL тремя разными способами:

  1. в веб-интефейсе phpMyAdmin, записывая в ручную информацию в каждую ячейку таблицы;
  2. с помощью подготовленных SQL-запросов;
  3. программно, используя функции модуля MySQLi PHP, составив для этого соответствующий скрипт.

А, теперь выполним обратные действия, посмотрим, как можно вывести данные из таблицы MySQL с помощью SQL-запросов.

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

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

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

В связи с чем, вывод данных из БД MySQL здесь будет рассматриваться только для варианта с локальным веб-сервером «Denwer», который используется в нашем случае при создании сайта. Для хостинга будет все аналогично.

Выводим данные из БД MySQL в PHP

  • Вывод одиночной строки (использование одномерного массива)
  • Вывод набора строк по заданному условию (использование двумерного массива)
  • Проверка наличия записи в таблице
  • Исходные файлы сайта

Здравствуйте уважаемый посетитель!

В предыдущей статье мы рассмотрели возможность вывода записей MySQL с помощью SQL-запросов. При этом, результаты отображались на странице веб-приложения phpMyAdmin.

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

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

Следует отметить, что наиболее часто встречающиеся PHP-функции, предназначенные для вывода данных из таблиц MySQL, по виду возвращаемого результата можно разделить на три варианта:

  1. когда результатом выполнения SQL-запроса может быть лишь только одна строка;
  2. в случае, если результатом выборки может быть множество строк.
  3. при выполнении запроса на проверку наличия записи в таблице по заданному условию.

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

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

В случае поверки наличия записи в таблице, функция возвращает значение переменной типа «bool», где «TRUE» — запись существует, «FALSE» — отсутствует.

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

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

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

Правая Скобка ]

Энциклопедия веб разработчика. Все что интересно HTML, CSS, PHP, MySQL и не только !

PHP cоздание базы данных

Создание базы данных MySQL с помощью PHP

Чтобы создать или удалить базу данных, необходимо обладать правами администратора. Для создания базы данных MySQL в PHP используется функция mysql_query. Эта функция принимает два параметра и возвращает TRUE при успешном завершении или FALSE при сбое.

Синтаксис:

Параметр и описание
1 SQL
Обязательный — SQL-запрос для создания базы данных
2 connection
Необязательный параметр — если не указан, будет использоваться последнее соединение с использованием mysql_connect.

Пример создания базы данных:

Выбор базы данных
После установления соединения с сервером базы данных необходимо выбрать конкретную базу данных, в которой находятся таблицы с данными.

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

PHP предоставляет функцию mysql_select_db для выбора базы данных. Он возвращает TRUE при успешном выборе или FALSE при сбое.

Простая работа с MySQL в простых примерах #1 — работа с базами, создание таблиц

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

Ниже будут приведены наиболее полезные при работе с MySQL команды и примеры их выполнения.

Будет приведен пример работы с MySQL как из консоли сервера, так и и из mysql -клиента — просмотр баз, таблиц в них. Будет приведен пример создания простой таблицы, описание типов используемых типов столбцов в ней. Во второй части будет дано описание и примеры работы с таблицей — наполнение данными, редактирование их и прочее.

Для примера будет создана таблица, содержащая список контактов.

Уточнение: MySQL — это сервер баз данных, а mysql — это консольный unix-like клиент, для работы с MySQL. Строки, начинающиеся с символа $ означают, что они выполняются из обычной консоли сервера.

Для подключения к серверу MySQL используется такая команда:

$ mysql -u username -p
Enter password:
mysql>

Если сервер MySQL находится на удалённом хосте — его можно указать с помощью ключа -h :

$ mysql -u username -p -h somehost.com
Enter password:
mysql>

Очень полезная команда — status , которая выводит информацию об используемой версии MySQL и многое другое:

mysql> status
—————
mysql Ver 14.14 Distrib 5.5.29, for FreeBSD9.0 (i386) using 5.2

Connection id: 107801
Current database: test1
Current user: username@localhost
SSL: Not in use
Current pager: most
Using outfile: »
Using delimiter: ;
Server version: 5.5.29-log Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /tmp/mysql.sock
Uptime: 8 days 1 hour 31 min 32 sec

Threads: 5 Questions: 8391067 Slow queries: 37 Opens: 17162 Flush tables: 1 Open tables: 64 Queries per second avg: 12.044

Ещё полезная возможность — выполнять консольные команды сервера, не выходя из клиента mysql , для этого используйте команду system :

mysql> system w;
8:12PM up 8 days, 1:40, 4 users, load averages: 0.20, 0.29, 0.26
USER TTY FROM LOGIN@ IDLE WHAT
setevoy pts/1 attached-masquerader.vol 10:43AM 9:28 htop
setevoy pts/2 attached-masquerader.vol 10:43AM — w
setevoy pts/3 attached-masquerader.vol 10:43AM 54 mysql -u root -p
setevoy pts/4 attached-masquerader.vol 10:43AM 53 /usr/local/bin/bash

Теперь — примеры использования некоторых SQL-функций.

К примеру — выведем текущую дату:

mysql> select now();
+———————+
| now() |
+———————+
| 2013-01-27 15:56:20 |
+———————+
1 row in set (0.00 sec)

Можно выполнить запрос нескольких функций, для этого — после первого запроса не ставим закрывающие точку с запятой:

Если в процессе вы передумали продолжать набор команд и хотите завершить набор — укажите с :

mysql> select now(),
-> c
mysql>

Что бы отобразить список доступных баз — используйте команду:

Что бы переключиться на использование определённой базы — используйте use :

mysql> use base1;
Database changed

Что бы проверить, какая в данный момент база используется — выполните:

mysql> select database();
+————+
| database() |
+————+
| base1 |
+————+
1 row in set (0.00 sec)

Просмотреть содержащиеся в ней таблицы можно командой:

mysql> show tables;
+———————+
| Tables_in_base1 |
+———————+
| tablename |
+———————+
1 row in set (0.00 sec)

В базе base1 имеется только одна таблица tablename .

Всё то же самое можно сделать и не подключаясь к серверу MySQL, а напрямую из консоли сервера. Например — просмотреть список имеющихся на сервере баз:

$ mysqlshow -u root -p
Enter password:
+———————+
| Databases |
+———————+
| base1 |
| base2 |
| base3 |
| base4 |
+———————+

А просмотреть имеющиеся в базе данных MySQL таблицы из консоли можно так:

$ mysqlshow base1 -u root -p
Enter password:
Database: base1
+————+
| Tables |
+————+
| tablename |
+————+

Посмотреть содержимое таблицы из консоли можно следующим образом:

$ mysqlshow base1 tablename -u root -p

Учтите, что если название таблицы содержит символ подчеркивания «_» — то mysqlshow может неверно обработать запрос, и вывести примерно следующее:

$ mysqlshow base1 tablename_1 -u root -p
Enter password:
Database: contacts Wildcard: tablename_1
+————-+
| Tables |
+————-+
| tablename_1 |
+————-+

Что бы избежать этого — добавьте символ % в конец запроса:

$ mysqlshow base1 tablename_1 % -u root -p
Enter password:
Database: contacts Table: tablename_1
+——————+——————+——+——+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——————+——————+——+——+———+—————-+
| contact_id | int(10) unsigned | NO | PRI | NULL | auto_increment |

Выполнять запросы SQL можно как из консоли сервера, так и из консоли клиента mysql . Так же, запросы можно вводить не напрямую, а из файла. К примеру, имеется файл с таким содержимым:

$ cat temp.sql
select now()

Что бы выполнить этот запрос из консоли сервера — выполните:

А из клиента mysql — так:

mysql> . temp.sql
+———————+
| now() |
+———————+
| 2013-01-31 18:00:48 |
+———————+
1 row in set (0.00 sec)

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

Теперь — подключимся под пользователем root и создадим базу test1 :

# mysql -u root -p
Enter password:
mysql> create database test1;
Query OK, 1 row affected (0.00 sec)

Далее — создадим пользователя user1 , дадим ему права на доступ к базе test1 и установим пароль mypasswd :

mysql> grant all on test1.* to ‘user1’@’localhost’ identified by ‘mypasswd’;

Теперь — подключимся к серверу под новым пользователем и сразу переключимся на базу test1 , что бы избежать ввода команды use database , после чего сразу проверим используемую базу с помощью функции select database() :

# mysql -u user1 -p test1
Enter password:
mysql> select database();
+————+
| database() |
+————+
| test1 |
+————+
1 row in set (0.00 sec)

При создании таблицы используется такой синтаксис:

имя_столбца ТИП(значение) АТРИБУТ

Атрибуты могут иметь значение либо NULL (может быть пустым), либо NOT NULL — обязательно должен быть заполнен.

В примере будут использоваться такие типы столбцов:

VARCHAR — подразумевает, что в столбце будут использоваться символьные данные — текст — переменной длины, в (значение) указывается количество знаков, которое может быть использовано в этом столбце;
DATE — подразумевает использование даты в формате YYYY-MM-DD ;
INT — только целые числа, без дробей;
UNSIGNED — только положительные значения;
AUTO_INCREMENT — автоматически задаст значение, на единицу большее существующего;
PRIMARY KEY — индексное значение, всегда должно быть уникальным;
ENUM — столбец перечисляемого типа, может принимать значения, указанные в его атрибутах, в примере это (‘Y’, ‘N’) .

PRIMARY KEY указывает, что указанные столбцы являются индексами, подробнее тут>>> .

И — пример создания таблицы списка контактов, имена столбцов достаточно красноречивы, что бы можно было определить их назначение и выдвигаемые к столбцам требования:

mysql> CREATE TABLE main_list (contact_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50), phone VARCHAR(20), city VARCHAR(20), email VARCHAR(50), skype VARCHAR(20), icq INT UNSIGNED, birth_date DATE, facebook_address VARCHAR(50), vk_address VARCHAR(50), real_type ENUM(‘Y’, ‘N’));
Query OK, 0 rows affected (0.26 sec)

Что бы просмотреть созданную таблицу — выполним:

mysql> desc main_list;
+——————+——————+——+——+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+——————+——————+——+——+———+—————-+
| contact_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| first_name | varchar(50) | NO | | NULL | |
| last_name | varchar(50) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
| skype | varchar(20) | YES | | NULL | |
| icq | int(10) unsigned | YES | | NULL | |
| birth_date | date | YES | | NULL | |
| facebook_address | varchar(50) | YES | | NULL | |
| vk_address | varchar(50) | YES | | NULL | |
| real_type | enum(‘Y’,’N’) | YES | | NULL | |
+——————+——————+——+——+———+—————-+

Добавим вторую таблицу:

mysql> CREATE TABLE main_socials (entry_id INT UNSIGNED AUTO_INCREMENT NOT NULL, contact_id INT UNSIGNED NOT NULL, vk_id VARCHAR(100), facebook_id VARCHAR(100), PRIMARY KEY (entry_id, contact_id));
Query OK, 0 rows affected (0.01 sec)

mysql> desc main_socials;
+————-+——————+——+——+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————-+——————+——+——+———+—————-+
| entry_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| contact_id | int(10) unsigned | NO | PRI | NULL | |
| vk_id | varchar(100) | YES | | NULL | |
| facebook_id | varchar(100) | YES | | NULL | |
+————-+——————+——+——+———+—————-+
4 rows in set (0.00 sec)

При указании столбцу параметра AUTO_INCREMENT необходимо так же установить определение индекса — PRIMARY KEY во избежание ошибки такого плана:

ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key

Так же, если вы хотите в таблице использовать более индекса 1 PRIMARY KEY — его необходимо указать в конце запроса, в виде отдельного значения:

… , PRIMARY KEY (entry_id, contact_id));

В противном случае — вы можете получить ошибку такого плана:

ERROR 1068 (42000): Multiple primary key defined

Если таблица создана ошибочно, или больше не нужна — удалить её можно командой:

mysql> drop table tablename;
Query OK, 0 rows affected (0.75 sec)

Если в таблице имеются лишние столбцы — удалить их можно так:

mysql> ALTER TABLE tablename DROP COLUMN column_name;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0

Так же, полезная страница команд MySQL тут>>> и кратко о работе с резервными копиями — тут>>> .

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

Учебная база данных SQL, скачать файл дампа и установить

Primary tabs

Forums:

ПРИМЕЧАНИЯ:

Данная база данных прилагается к учебнику Астаховой, Толстоброва, Мельникова. Но изначально прилагалась только Oracle-версия, на основе которой я сделал для вас MySQL-дамп, который можно использовать для изучения SQL на примере бесплатной, знаменитой и замечательной СУБД MySQL:

  1. MySQL: https://yadi.sk/d/JWM7iR9Lj5ztd
  2. Oracle: https://yadi.sk/d/KwHsTNEpj5zxH

Как развернуть эту базу даных

О том как загрузить дамп в MySQL читайте здесь.

Схема базы

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

Илон Маск рекомендует:  Что такое код drop database
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL