HTML, Excel, Word, SEOPHP курс для чайников ⇒ Работа с данными

PHP для "чайников"

Инструменты
Выбираем IDE
Выбираем Web-сервер
Выбираем СУБД
Структура языка PHP
Первый шаг
Синтаксис
Типы данных
Переменные и константы
Операторы
Выражения
Управляющие структуры
Функции
Классы
Исключения
Ошибки
Массивы
Глобальные массивы
Cookies
Сессии
Загрузка файлов
Работа с файлами
Работа с файлами на диске
Работа с данными в файле
Пример управления файлами
Работа с базами данных
Подключение
Анализ результатов
Выполнение запросов
Отключение
Пример: отслеживание пользователей
Работа в сети
Отправка почты
Безопасность
HTTP-аутентификация
Защита логином и паролем
Автоматизация
Регулярные выражения в PHP
Интеграция
PHP и JavaScript



Работа с данными


Автор: Артемьев Сергей Игоревич
ICQ: 438856621
email: _spin_@bk.ru

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

Все запросы SQL разделяются на три большие группы:


1. Запросы управления структурой базы данных;


2. Запросы управления данными;


3. Служебные запросы.

Управление структурой

К первой группе относятся запросы на создание баз данных, таблиц, представлений и других объектов СУБД. Поддержка тех или иных объектов зависит от версии MySQL, поэтому я рекомендую не злоупотреблять использованием хранимых процедур и представлений. Если вы собираетесь использовать скрипт на разных версиях MySQL - используйте только таблицы.

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


	CREATE TABLE `имя_таблицы`
    (
    	`имя поля` тип_поля_и_длина ограничения_и_опции,
        ...
    )
    

Здесь `имя_таблицы` - это имя, по которому мы будем обращаться к таблице из запроса. Если имя таблицы содержит пробелы или спецсимволы - надо всегда заключать в обратные кавычки (символ  ` , обычно на одной клавише с "ё"). Это правило относится к именам любых объектов, используемых в запросах. В общем случае рекомендуется не использовать в именах объектов национальные символы и пробелы, потому что это не только увеличивает объём текста запроса, но и приводит к несовместимости, т.к. не все MySQL-сервера поддерживают имена в национальной кодировке или utf8.

`Имя поля` - символьное имя поля (колонки, столбца). Здесь ограничения такие же, как и на имена таблиц.

`Тип_поля_и_длина` определяет, данные какого типа хранятся в этом поле. В MySQL существует достаточно много различных типов, как то:

1. Текстовые: char, varchar, text;

2. Числовые: int, float, decimal;

3. Даты и времени: timestamp, datetime, date, time;

4. Логические: boolean, bit;

5. Двоичные: binary, varbinary;

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

`Ограничения_и_опции` - это набор дополнительных атрибутов, описывающих свойства поля. Атрибуты записываются последовательно и разделяются пробелами. Наиболее часто используются:

NULL - означает, что значение в поле может отсутствовать

NOT NULL - значение поля должно всегда присутствовать.

auto_increment - значение поля будет автоматечески увеличиваться при добавлении новой записи, т.е. значение поля в каждой последующей записи будет на "1" больше предыдущей.

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

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


	CREATE TABLE `user_tracker` 
	(              
    	`id` int(11) NOT NULL auto_increment,    
        `session_id` varchar(100) default NULL,  
        `enter_dt` datetime default NULL,        
        `exit_dt` datetime default NULL,         
        `user_ip` varchar(30) default NULL,      
        `user_agent` varchar(100) default NULL,  
        PRIMARY KEY  (`id`)                      
	)

Отдельно стоит упомянуть значение NULL, которое очень часто становится камнем преткновения для начинающих специалистов. Мы все привыкли, что компьютер оперирует бинарной логикой, т.е. любое выражение может быть сведено к "Да" или "Нет". Но с базами данных всё несколько сложнее, т.к. надо как-то обрабатывать поля, для которых не указано ни пользовательское значение, ни значение по-умолчанию. Для этого и было введено значение NULL, которое можно интерпретировать как "Не знаю". При создании скриптов надо всегда учитывать, что получаемые из базы данных значения могут не иметь никакого значения.

Кроме конструкции CREATE при управлении схемой базы данных часто используются конструкции ALTER и DROP. Первая используется для модификации объектов (например, добавдения и удаления полей в таблице). Вторая конструкция позволяет полностью удалить объект из базы.

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

Управление данными

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

В SQL предусмотрено 4 основные команды управления данными:

1. SELECT. Используется для получения данных из одной или нескольких таблиц.

2. INSERT. Служит для добавления записей в таблицу.

3. UPDATE. Служит для изменения одной или нескольких записей в таблице.

4. DELETE. Используется для удаления записей.

Рассмотрим каждую команду подробнее:

SELECT

Синтаксис команды очень простой:


	SELECT <список полей>
	FROM <имя таблицы>
	WHERE <условия>
	ORDER BY <список полей сортировки>

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

Если необходимо выбрать все поля, то <список полей> можно заменить на * (звёздочка). Если нужны все записи, то строку WHERE добавлять не надо, а если убрать строку ORDER BY, то данные будут выгружены без сортировки (но не обязательно в том порядке, в котором добавлялись в таблицу).

Например, выбрать все записи из таблицы user_tracker можно так:


	SELECT *
	FROM user_tracker

Выбрать все записи, принадлежащие IP-адресу '192.168.10.33':


	SELECT *
	FROM user_tracker
	WHERE user_ip = '192.168.10.33'


Более сложные запросы мы расмотрим позже в комплексном примере.

INSERT

Команда добавления новой записи в общем виде записывается так:


	INSERT <имя таблицы> (<список полей>)
	VALUES (<список значений>)

В список полей можно включать не все поля таблицы, а только необходимые. Все остальные будут установлены в NULL или значение по-умолчанию. Автоникрементные поля указывать не нужно ни в вписке полей, ни в списке значений. Здесь главное условие - соответствие порядка полей с порядком значений. Это означает, что если вы указали список полей как (поле-3, поле-1, поле-2), то и значения перечислять надо в таком же порядке: VALUES (значение-поля-3, значение-поля-1, значение-поля-2).

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


	INSERT user_tracker 
		(session_id, enter_dt, exit_dt, 
		user_ip, user_agent)
	VALUES ('sadeFssadlkdi', NOW(), NULL, 
			'192.168.10.33', 'Mozilla Firefox 3.0');

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


	INSERT user_tracker 
		(session_id, enter_dt)
	VALUES ('lksjdlkjad', '2009-10-01 23:10:00');

UPDATE

Эта команда применяется для изменения значений одного или нескольких полей у указанного количества записей. Синтаксис очень прост:


	UPDATE <имя таблицы>
	SET 
		<поле-1> = <значение-X>, 
		<поле-2> = <значение-Y>,
		...
	WHERE <условия>	

Здесь <поле...> - имя обновляемого поля (столбца), а <значение...> - его новое значение. Если описан блок WHERE, то будут обновлены только записи, отвечающие условию <условия>. Если условия не указаны - обновятся все записи в таблице.

Например, запрос для замены user_agent у всех пользователей с IP-адресом 192.168.10.33 на "Internet Explorer 7" будет таким:


	UPDATE user_tracker

	SET
		user_agent = 'Internet Explorer 7'
	WHERE user_ip = '192.168.10.33'


DELETE

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


	DELETE
	FROM <имя таблицы>
	WHERE <условия>	

Команда читается как "удалить из таблицы <имя таблицы> все записи, для которых истинно условие <условия>". Вот пример запроса, удаляющего все записи, у которых в поле user_agent есть слово "mozilla":


	DELETE
	FROM user_tracker
	WHERE user_agent like '%mozilla%'	

Служебные запросы

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

 



В начало страницы



В начало страницы