Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Урок № 9. Работа с базой данных и основы SQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1] 

> Описание: Первые шаги.
vitaliy_mad
Отправлено: 19 Января, 2009 - 12:04:53
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


Помог: 0 раз(а)




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

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

PHP:
скопировать код в буфер обмена
  1.  
  2. Номер  | Название   | Цена  | Остаток
  3. -------+------------+-------+---------
  4. 1      | Процессор  | 200   |  4
  5. 2      | Видеокарта | 120   |  1
  6. 3      | Монитор    | 200   |  2
  7. 4      | Мышь       | 6     |  10
  8.  


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

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

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

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

Для любой работы с БД необходимо установить соединение с СУБД. В PHP для соединение с СУБД PostgreSQL используется функция pg_connect.
Установим соединение на локальной машиной (компьютер на котором производим подключение и на котором стоит наша СУБД) с базой ourdatabase,
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $user="nick";
  4. $pass="pass";
  5. $connection = pg_connect ("host=127.0.0.1 dbname=ourdatabase user=$user password=$pass");
  6. ?>
  7.  

После выполнения кода переменная $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 (text):
скопировать код в буфер обмена
  1.  
  2. $result=pg_query($connection,"CREATE TABLE sklad (no smallint, name varchar(100), price integer, last integer);");
  3.  

$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:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $res=pg_query($connection,"INSERT INTO sklad (no,name) VALUES (3,'Монитор');");
  4. ?>
  5.  

Расмотрим ситуацию, когда значение 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:
скопировать код в буфер обмена
  1.  
  2. <?
  3. while ($db=pg_fetch_array($result))
  4. {
  5.     $no=$db['no'];
  6.     $name=$db['name'];
  7.     $cena=$db['price'];
  8.     $ost=$db['last'];
  9.     print "
  10.    Номер: $no
  11.    Название: $name
  12.    Цена: $cena
  13.    Остаток: $ost
  14.    ";
  15. }
  16. ?>
  17.  

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

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

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $rows=pg_num_rows($result);
  4. for ($i=0;$i<$rows;$i++)
  5. {
  6.     $no=pg_result($result,$i,'no');
  7.     $name=pg_result($result,$i,'name');
  8.     $cena=pg_result($result,$i,'price');
  9.     $ost=pg_result($result,$i,'last');
  10.  
  11.     print "
  12.    Номер: $no
  13.    Название: $name
  14.    Цена: $cena
  15.    Остаток: $ost
  16.    ";
  17. }
  18. ?>
  19.  

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

На этом пожалуй завершим первую часть урока...

(Отредактировано автором: 19 Января, 2009 - 12:57:40)

 
 Top
Champion Супермодератор
Отправлено: 13 Июля, 2009 - 11:12:25
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




vitaliy_mad пишет:
На этом пожалуй завершим первую часть урока...
А вторая будет?
 
 Top
sanstorm
Отправлено: 08 Декабря, 2011 - 08:05:12
Post Id



Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Нояб. 2011  
Откуда: Владивосток


Помог: 0 раз(а)




А для mysql урок будет ?


-----
http://kreedz[dot]ru/ - Кридз Сообщество
 
 Top
Nikkoo
Отправлено: 19 Февраля, 2012 - 13:59:07
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Февр. 2012  


Помог: 0 раз(а)




Отличный урок. Автору спасибо.
 
 Top
kester
Отправлено: 12 Марта, 2012 - 10:23:05
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2012  
Откуда: IF, UA


Помог: 0 раз(а)




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Уроки php »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB