БД это то, где можно хранить данные, для того чтобы можно было быстро их достать. Сама база данных имеет название (далее Имя БД) и содержит в себе таблицы (очень похоже на папку и файлы в ней). Все данные, собственно, хранятся в таблицах. А каждая таблица в БД, если грубо, то это набор строк и столбцов (как и любая другая таблица).
Другими словами можно представить БД как папку с excel`евскими документами.
Все просто.
Для начала давайте создадим саму базу данных.
У меня установлен Денвер, поэтому я для работы с БД в “ручном режиме” пользовался специальным скриптом phpmyadmin.
Если он у вас тоже есть, то чтобы запустить его достаточно в адресной строке браузера написать http://localhost/phpmyadmin.
Откроется его главная страница, где справа увидите поле “Новая база данных”. Введите там Имя БД и в выпадающем списке выберите нужную кодировку (или ничего не выбирайте).
Нажмите кнопку Создать.
Все. База данных создалась.
Теперь в правой части окна можно создать таблицы в этой БД. Дальше все интуитивно понятно.
Общая схема работы с БД – такая:
1. Соединяемся с БД (представьте, что звоните кому-то по телефону).
2. Отсылаем запросы (разговариваете: задаете вопросы и получаете ответы).
3. Закрываете соединение (кладете трубку).
Последний пункт в php выполняется сам, когда скрипт заканчивает свою работу, поэтому функций для этого там и не предусмотрено, а для всего остального есть очень много удобных функций.
Шучу
Для закрытия соединения тоже есть, но начнем с первого пункта.
Итак, открываем соединение.
mysql_connect( $hostname, $user, $password);
mysql_select_db( $dbname);
Первая строка соединяется с сервером СУДБ (ах, да, забыл сказать, что сами БД хранит система управления базами данных или просто MySQL в нашем случае).
Для соединения с сервером, как и везде нужно указать хост, имя пользователя и пароль.
Вторая строка указывает какую БД использовать и принимает в качестве параметра Имя БД (указываем папку которая нас интересует
).
С БД можно много чего делать, но все основные операции можно разделить на следующие: выборка (вытаскивание данных), удаление, изменение, вставка (занесение данных).
Я пока что решил разобраться только с операцией выборки.
Тут тоже все просто. Все запросы отправляются одной функцией:
mysql_query ($sql);
где $sql – текст запроса.
Сама функция возвращает идентификатор результата. То есть все, что вы выбрали – она оставляет у себя, а вам отправляешь только id этих данных. А вот для обращения к самим данным используются уже другие функции.
Например, чтобы выбрать первую строку результата из таблицы mytable можно сделать так:
<?
$result = mysql_query("select * from mytable");
$row = mysql_fetch_row($result);
?>
После этого в $row будет сорежаться строка в виде массива.
Есть несколько функций для выборки строки из результата:
mysql_fetch_row, mysql_fetch_array, mysql_fetch_assoc.
Единственное чем они отличаются – это видом массива, который они возвращяют.
Например mysql_fetch_array возвратит ассоциативный массив.
Рассмотри на примере их работу лучше.
Пусть у нас есть таблица людей каких-то с полями:
name – имя,
surname – фамилия,
age – возраст.
Таблица будет называться people.
В ней для каждого человека будет по строке. И путь в ней будет пока 3 человека:
<?
mysql_connect("localhost", "root", "");
mysql_select_db("mydb");
$result = mysql_query("select * from people");
$row = mysql_fetch_row($result);
Print_r($row);
// выведет array ( 0 => "Donald", 1 => "Black", 2 => 43 );
$row = mysql_fetch_assoc($result);
// выведет array ( 'name' => "Alex", "surname" => "Smith", "age" => 25 );
?>
Кстати, забыл сказать, что после каждой выборки строки внутренний указатель переводится на следующую строку. Поэтому при вызове mysql_fetch_assoc() вернулась вторая строка.
В своих скриптах я, в основном, пользовался функцией mysql_fetch_assoc(), потому что так удобнее работать с массивом-результатом. Обращение к элементам более наглядно:
$row[’name’], вместо $row[0]. Сразу видно какой элемент выделяется.
Что же касается функции mysql_fetch_array(), то она сожержит в себе поля обоих предыдущих массивов. Можно обратиться и $row[’name’] и $row[0], что не верно для предыдущих случаев.
Есть еще один момент, где у меня проблемы возникли при выборки значений из БД.
С кодировкой… Долго я мучался, пока все более-менее не растряслось.
Перед тем как вывести данные из БД нужно позаботиться о кодировках в трех местах.
Первое место – кодировка данных в таблице, второе – кодировка данных в массиве при выборке ($row[’name’] – строка и может быть в разных кодировках). Последнее место – это сама страница, куда будут выводиться данные.
По-умолчанию кодировка данных в массиве (второе место) при выборке такая же, как в таблице, поэтому тут проблемы не должно быть.
Но если кодировка данных в БД и кодировка страниц разная, то вместо текста на странице выведутся каракули вместо текста. Если прописать в теге html-страницы кодировку из БД, то проблема решиться.
Вообще, у php и mysql есть много функций по работе с кодировками/перекодировкой и на эту тему можно написать отдельную статью даже. Что я обязательно и сделаю в одном из следующих постов.