Работа с базами данных в php

Ну вот! Наконец я добрался до самого интересного. Сегодня я расскажу, зачем нужна база данных, как ее использовать и какие проблемы у меня возникли при первых попытках работы с ней.
С чего бы начать… Начну, пожалуй, с общей схемы работы с БД (сокращение от База Данных).
БД это то, где можно хранить данные, для того чтобы можно было быстро их достать. Сама база данных имеет название (далее Имя БД) и содержит в себе таблицы (очень похоже на папку и файлы в ней). Все данные, собственно, хранятся в таблицах. А каждая таблица в БД, если грубо, то это набор строк и столбцов (как и любая другая таблица).
Другими словами можно представить БД как папку с excel`евскими документами.
Все просто.

Для начала давайте создадим саму базу данных.
У меня установлен Денвер, поэтому я для работы с БД в “ручном режиме” пользовался специальным скриптом phpmyadmin.
Если он у вас тоже есть, то чтобы запустить его достаточно в адресной строке браузера написать https://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 человека:

Name Surname Age
Donald Black 43
Alex Smith 25
John Sadovski 57
<?
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 есть много функций по работе с кодировками/перекодировкой и на эту тему можно написать отдельную статью даже. Что я обязательно и сделаю в одном из следующих постов.
Ну вот и все. Это был novice. Всем удачи.





Читайте также:



12 Ответов на “Работа с базами данных в php”

  1. Klansi

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

    на примере поясню:
    1. $row = mysql_fetch_array($result,1); - в переменной $row будет ассоциативный массив. Такой возвратит и функция mysql_fetch_assoc().
    2. $row = mysql_fetch_array($result,2); - в переменной $row будет неассоциативный массив. Такой возвратит и функция mysql_fetch_row().
    3. $row = mysql_fetch_array($result,3); - в переменной $row будет массив, состоящий как из ассоциативных индексов, так и из численных. Такой же результат получим, если не указывать второй параметр.

    По скорости функция mysql_fetch_array() не уступает функциям mysql_fetch_row() и mysql_fetch_assoc().

  2. lena

    Ваш пример не работает!
    Кто-то умеет работать с базой mysql?
    Кому не сложно помоч, разъяснить и в конец-концов показать как создается база!
    - пример записи и чтения даних с бази;
    Всем не равнодушним прошу стучать сюда! ICQ 457-458-138
    P.S. Очень нужна помощ!

  3. novice

    lena, тут может быть много причин, почему этот пример у Вас не сработал. Видимо, не поставили базу или не создали нужную таблицу и т.п.

  4. lena

    [ссылка]
    Вот здесь понятно написано!

  5. “3. Закрываете соединение (кладете трубку).
    Последний пункт в php выполняется сам, когда скрипт заканчивает свою работу, поэтому функций для этого там и не предусмотрено…”
    а как же функция mysql_close() :)

  6. “Есть несколько функция для выборки строки из результата” - думаю стоит исправить на функций

  7. novice

    2 Snejok: Спасибо, исправил :)

  8. novice

    Снежок, читайте внимательнее. Насчет mysql_close - это была шутка :)

  9. KEI

    А после создания БД её кодировку можно как либо изменить? И где вообще посмотреть какая кодировка у БД? P.s. речь о phpmyadmin

  10. Ваван

    Распишите пожалуйста работу Smarty c БД, на примере с гостевой книгой. Я думаю народ Вам будет признателен!
    За проделанное ранее - огромное спасибо!

  11. А после создания БД её кодировку можно как либо изменить? И где вообще посмотреть какая кодировка у БД? P.s. речь о phpmyadmin

    Для того что бы посмотреть кодировку таблиц из phpMyAdmin нужно выполнить простой SQL запрос:
    SHOW VARIABLES LIKE ‘char%';
    И изменить ее можно уже после создания таблиц

  12. Опа Джигурда оп оп оп оп опа Джигурда


© Copyright. . I-Novice. All Rights Reserved. Terms | Site Map