На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » И2Р Программы » Программирование » PHP

MySQL с высоты птичьего полета

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

Для работы с MySQL, воспользуемся одним из возможных средств - DBI (Data Base Interface). Для этого подключим его к нашей программе.

use DBI;

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

$dbh = DBI->connect("DBI:mysql:$basaname", 
$login, $password);

$basaname = Имя вашей базы.
$login = Логин для доступа к
              MySQL серверу.
$password = Пароль для доступа
              к MySQL серверу.

Теперь у нас есть дескриптор $dbh с помощью которого, мы можем обращаться к нашей БД. Как правило, он используется для SQL запросов.

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

Итак. Для того что бы сделать запрос к БД, используется метод prepare(). Например:

$sth = $dbh->prepare("select NAME 
 from WORKERS where SALARY>500");

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

IDNAMESALARY
1Pupkin16
2Ivanov600
3Petrov502

Называется она, конечно же, WORKERS.

После того, как мы сделали запрос, мы получаем дескриптор запроса $sth из которого можем извлечь любую интересующую нас информацию. Заметьте, что при присвоении дескриптору нового значения, информация о предыдущем запросе теряется. Т.е. если вам нужно сделать запрос и сохранить только что полученную информацию. Используйте в качестве нового дескриптора $sth2 и т.д.

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

while (@row = $sth->fetchrow_array){
 в $row[0] находится имя работника
}

За каждый такт цикла while, происходит считывание одной записи из возвращенных MySQL. При этом каждый элемент массива - это одно поле считанной записи. Обычно количество полей можно предсказать при формировании запроса, но если это все таки не возможно (некоторые универсальные скрипты) используйте переменную $#row в ней хранится индекс последнего элемента массива.

В своем запросе, мы можем перечислять необходимые поля явно:

select NAME, PHONE, AGE 
from WORKERS where SALARY>500;
а так же использовать следующую конструкцию:
select * from WORKERS where SALARY>500;

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

Иногда возникает необходимость как-то отсортировать данные. Для этого используется конструкция ORDER BY. Например:

select * from WORKERS 
where SALARY>500 ORDER BY NAME;

Сортировать по имени. Хочу заметить, что далеко не на всех серверах работает сортировка русских символов. Дело в том, что на самом деле компьютеру алфавит не известен и сортирует он по кодам соответствующих символов и если в кодировке Win1251 коды символов имеют порядок, то в кодировке KOI (преимущественно используемой на Linux серверах) порядок не наблюдается.

Если вам необходимо проделать обратную сортировку, то к запросу добавляется слово DESC

select * from WORKERS 
where SALARY>500 ORDER BY NAME DESC;

Помимо функции чтения из БД, бывают очень полезны функции удаления (delete) и изменения (update) и добавления (insert) записи. Рассмотрим их более подробно.

INSERT

Функция insert предназначена для вставки в БД записи. Например так:
insert into WORKERS values 
(0, "Vasily A. Pupkin", "555-44-33", 512);

В скобках через запятую перечислены значения каждого поля. В данном случае, нам так же необходимо знать порядок полей. Самая распространенная ошибка с функцией insert - это не соответствие типов. Литерные значения и даты, всегда должны указываться в скобках. Очень часто запись имеет уникальный ID (как правило он хранится в первом поле). БД берет на себя заботу о том, что бы ID действительно оказался уникальным, поэтому нам достаточно указать на его месте 0, а система сама вычислит и подставит туда нужное значение.

DELETE

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

delete from WORKERS 
where NAME="Vasily A. Pupkin";

Данный запрос удаляет из базы запись поле NAME у которой равно "Vasily A. Pupkin". Если таких записей будет несколько, они все будут удалены. Именно поэтому лучше производить удаление по ID если точно не известно может ли быть еще одна запись с подобным значением.

Условия могут быть более сложными. Для этого используются слова OR и AND.
delete from WORKERS 
where NAME="Vasily A. Pupkin" or SALARY < 10;
Удаляем всех Пупкиных и тех у кого жалование меньше 10 у.е.

UPDATE

Функция update изменяет запись или записи в зависимости от условия. Например:

update WORKERS set SALARY=512
where NAME="Vasily A. Pupkin";
В данном примере, мы повысили Пупкину жалование.

Обращаться с функцией update нужно аккуратно, поскольку если не указать условие, будут изменены все (!) записи. Например:

update WORKERS set SALARY=120;
У всех одинаковая зарплата - 120 у.е.

Заключение

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

Philip A. Koryaka
Perl.RU

Другие разделы
C, C++
Java
PHP
VBasic, VBS
Delphi и Pascal
Новое в разделе
Базы данных
Общие вопросы
Теория программирования и алгоритмы
JavaScript и DHTML
Perl
Python
Active Server Pages
Программирование под Windows
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100