Работа с базами данных в 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. Всем удачи.
у функции 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().
Ваш пример не работает!
Кто-то умеет работать с базой mysql?
Кому не сложно помоч, разъяснить и в конец-концов показать как создается база!
- пример записи и чтения даних с бази;
Всем не равнодушним прошу стучать сюда! ICQ 457-458-138
P.S. Очень нужна помощ!
lena, тут может быть много причин, почему этот пример у Вас не сработал. Видимо, не поставили базу или не создали нужную таблицу и т.п.
[ссылка]
Вот здесь понятно написано!
“3. Закрываете соединение (кладете трубку).
Последний пункт в php выполняется сам, когда скрипт заканчивает свою работу, поэтому функций для этого там и не предусмотрено…”
а как же функция mysql_close()
“Есть несколько функция для выборки строки из результата” - думаю стоит исправить на функций
2 Snejok: Спасибо, исправил
Снежок, читайте внимательнее. Насчет mysql_close - это была шутка
А после создания БД её кодировку можно как либо изменить? И где вообще посмотреть какая кодировка у БД? P.s. речь о phpmyadmin
Распишите пожалуйста работу Smarty c БД, на примере с гостевой книгой. Я думаю народ Вам будет признателен!
За проделанное ранее - огромное спасибо!
А после создания БД её кодировку можно как либо изменить? И где вообще посмотреть какая кодировка у БД? P.s. речь о phpmyadmin
Для того что бы посмотреть кодировку таблиц из phpMyAdmin нужно выполнить простой SQL запрос:
SHOW VARIABLES LIKE ‘char%';
И изменить ее можно уже после создания таблиц
Опа Джигурда оп оп оп оп опа Джигурда