Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Уроки PHP (по материалам форума PHP.SU)
 
 

Урок № 9 - Работа с базой данных и основы SQL.

Автор (участник forum.php.su): vitaliy_mad
Источник: forum.php.su
Обсуждение: Обсуждение уроков.


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

СУБД (Система Управление Базами Данных) - набор программ и утилит, предназначенных для организации и ведения базы данных.
SQL - Structured Query Language -- язык структурированных запросов. SQL - не является языком программирования, правильнее будет звучать
язык работы с базами данных.
База Данных (БД) - совокупность структурированных данных, которые хранятся в виде таблиц.
Таблица - набор данных организованный в виде двумерного массива. Для доступа к данным таблицы используются имена колонок (столбцов, полей)
и номер записи (строки). Приведем пример таблицы:

Номер  | Название   | Цена  | Остаток
-------+------------+-------+---------
1      | Процессор  | 200   |  4
2      | Видеокарта | 120   |  1
3      | Монитор    | 200   |  2
4      | Мышь       | 6     |  10

Как видно из примера, у нашей таблицы четыре колонки: Номер, Название, Цена и остаток, и 4 строки (записи).

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

Теперь попробуем связать Базы данных и PHP.

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

Установка:
Процесс установки СУБД PostgreSQL описан в официальной документации, прилагаемой к дистрибутиву.
Для связи PHP и POstgreSQL необходимо в файле настроек PHP (php.ini) раскоментировать строку "extension=php_pgsql.dll".

Для любой работы с БД необходимо установить соединение с СУБД. В PHP для соединение с СУБД PostgreSQL используется функция pg_connect.

Установим соединение на локальной машиной (компьютер на котором производим подключение и на котором стоит наша СУБД) с базой ourdatabase,

<?PHP
$user
="nick";
$pass="pass";
$connection pg_connect ("host=127.0.0.1 dbname=ourdatabase user=$user password=$pass");
?>>

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

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


Создание таблиц.

В любой БД должны быть таблицы, с которыми мы будем работать. Для их создания используется SQL-запрос (команда для выполнение СУДБ):
CREATE TABLE name (col1 type, col2 type, ... );
name - имя будущей таблицы. Не рекомендуется называть таблицы зарезервированными именами, например: date, text, varchar, integer и т.д.
col1, col2 .... - имена колонок нашей таблицы;
type - тип данных, которые будут храниться в колонках.

Основные типы данных, наиболее часто используемые в работе:
smallint, integer, bigint - целые типы. отличаются друг от друга пределами своих значений. Один и тот же тип данных может иметь разные пределы, это зависит от операционной системы.
text - текстовый тип, предназначен для хранение больших текстов неопределенной длины.
varchar(size) - символьный тип, представляет собой массив из size символов.
boolean - логический тип. Может принимать только два значения: true (истина, 1) и false (ложь, 0).
timestamp with timezone - штамп времени. используется для хранение даты и времени с большой точностью.
так же есть значение NULL - оно используется для пустого значения любого типа.

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

CREATE TABLE sklad (no smallint, name varchar(100), price integer, last integer);

Запрос готов, но как его передать с помощью PHP? Для этого есть функция pg_query:

CODE:

<?PHP
$result
=pg_query($connection,
"CREATE TABLE sklad (no smallint, name varchar(100), price integer, last integer);");
?>

$result - ссылка на данные с результатом запроса. об этом чуть позже.
$connection - ссылка на наше соединение, от функции pg_connect.

Итак, таблица создана. Теперь осталось ее наполнить данными. Для этого существует конструкция INSERT:

INSERT INTO table VALUES (val1, val2, ...);
table - имя таблицы
val1,val2, ... - значение полей добавляемой записи, количество значений, для данного вида запроса, должно быть равно количеству полей в таблице.

Добавим в нашу таблицу данные:
INSERT INTO sklad VALUES (3,'Монитор',200,2);
Как видно из примера, все строковые и символьные типы, а так же несколько специальных (inet, macaddr), должны заключаться в одинарные
кавычки.

Теперь давайте представим, что наша таблица состоит из 10, а может 20 полей, а нам надо добавить строку с заполненными всего 2-5. Что делать? Неужели указывать кучу пустых значений? Конечно, нет! Для этого используется конструкция вида:

INSERT INTO table (col1, col2, ..., coln) VALUES (val1, val2, ..., valn);
Здесь сразу после названия таблицы в скобках пишем названия полей, для которых мы будем устанавливать значения. В этом случае количество
значений должно совпадать с количеством заявленных полей. Например:

INSERT INTO sklad (no,name) VALUES (3,'Монитор');

Мы добавили запись с установленными значениями no=3 и name='Монитор'. Остальные поля у нас оказались со значением NULL.

Теперь пора отправить этот запрос с помощью уже известной нам функции pg_query:

<?PHP
$result
=pg_query($connection,"INSERT INTO sklad (no,name) VALUES (3,'Монитор');");
?>

Рассмотрим ситуацию, когда значение NULL нас совсем не устраивает, и нам надо сделать по умолчанию другое значение.
Тогда необходимо создавать таблицу слегка другим образом:
CREATE TABLE name (col1 type DEFAULT val, col2 type DEFAULT val, ... );
где val - значения по умолчанию для соответствующих полей.

Запрос создания нашей таблицы преобразится в такой:
CREATE TABLE sklad (
no smallint,
name varchar(100),
price integer DEFAULT 0,
last integer DEFAULT 0 NOT NULL
);

Это значит, что поля no и name по умолчанию пустые, т.е. их надо явно указывать, а поля price и last по умолчанию будут равны 0. Но полю price можно присвоить NULL, а last нет. Это достигается с помощью приставки NOT NULL.


Считывание данных.

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

Итак для считывания данных используется запрос SELECT:
SELECT col1,col2,...,coln FROM table;
вернет нам поля col1,col2,...,coln для всех записей.

Если нам надо вернуть все поля, то вместо названий полей мы напишем просто * (звездочку):
SELECT * FROM table;
И опять же мы сталкиваемся с вопросом: а что делать если надо выбрать не все записи?Для этого опять есть вариант запроса:
SELECT * FROM table WHERE exp;
где exp - любое логическое выражение. например:
SELECT * FROM table WHERE price>50;
Вернет нам все поля записей, у которых поле price больше 50.

Так же есть возможность отсортировать полученный результат по какой либо колонке. Для этого достаточно дописать в конец предыдущего запроса
"ORDER BY col",
где col - имя колонки. Для обратной сортировки (от большего к меньшему) необходимо дописать в конец приставку DESC:
SELECT * FROM table ORDER BY price DESC; - вернет все записи от большей цены к меньшей.

$result=pg_query("SELECT * FROM sklad;");

Вернет в $result данные. Но print $result; ничего хорошего нам не покажет. Для дальнейшей работы с полученными данными их необходимо обработать. Приведу наиболее часто используемый, на мой взгляд, вариант обработки:

<?PHP
while ($db=pg_fetch_array($result))
{
    
$no=$db['no'];
    
$name=$db['name'];
    
$cena=$db['price'];
    
$ost=$db['last'];
    print 
"
    Номер: $no
    Название: $name
    Цена: $cena
    Остаток: $ost
    "
;
}
?>

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

Рассмотрим еще один пример:

<?PHP
$rows
=pg_num_rows($result);
for (
$i=0;$i<$rows;$i++)
{
    
$no=pg_result($result,$i,'no');
    
$name=pg_result($result,$i,'name');
    
$cena=pg_result($result,$i,'price');
    
$ost=pg_result($result,$i,'last');

    print 
"
    Номер: $no
    Название: $name
    Цена: $cena
    Остаток: $ost
    "
;
}
?>

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



 
 
 <<< Назад 
 Содержание 
 Вперед >>> 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS