Рассмотрим работу с базой данных mysql через php. Предварительно нужно подключить расширение php_mysql.dll в файле php.ini (только в старых версиях php это расширение подключено). У нас есть алгоритм работы с сервером баз данных (БД):
- Устанавливаем соединение с сервером БД (аналог mysql.exe –u логин –p пароль[имя_БД] в мониторе).
- Выбираем базу данных для работы (аналог USE в мониторе).
- Посылаем запрос (при использовании SELECT — работаем с выбранными данными).
- Закрываем соединение с БД (аналог quit в мониторе).
Функции php для работы с Mysql
- Подключаемся к базе данных:
$connect = mysql_connect("host","login","pass") //адрес сервера, логин, пароль к базе mysql_close([$connect]) //закрываем соединение с БД, указатель необязателен
При закрытии соединения с базой данных, можно не указывать саму БД, т.к. действия будут происходить с последним успешным соединением.
- Выбор базы через функцию mysql_select_db:
mysql_select_db("news");
У нас будут встречаться ошибки. При этом следует разграничить ошибки php и ошибки БД. Ошибки БД не будут выводиться на экран, т.к. с точки зрения php у нас все правильно. Поэтому для отслеживания ошибок БД можно в мониторе. Или использовать функции: mysql_errno (возвращает номер ошибки) и mysql_error (возвращает описание ошибки).
- Посылаем запрос к БД — функция mysql_query(сам запрос). Во избежание проблем с кодировкой, можно в начале послать запрос:
mysql_query("SET NAMES 'cp1251'"); //все данные из базы придут в этой кодировке
Сам запрос:
$result = mysql_query("SELECT * FROM teachers");
В результате запроса придет ответ в непонятном формате. Нам надо его перевести в массив.
- Конвертируем результат запроса в массив. Для этого используем функцию mysql_fetch_array:
$result = mysql_query(string query) //посылаем запрос $row = mysql_fetch_array($result[, type]) //конвертируем в массив
В результате работы кода вернется массив с удвоенными ячейками. Чтобы этого избежать, можно вторым параметром в функции mysql_fetch_array передать, какой массив мы хотим видеть: индексированный или ассоциативный:
//По умолчанию mysql_fetch_array($result, MYSQL_BOTH) //Индексированный массив mysql_fetch_array($result, MYSQL_NUM)//то же самое, что и mysql_fetch_row($result) // новая функция, можно ее использовать //Ассоциативный массив mysql_fetch_array($result, MYSQL_ASSOC)//то же самое, что и mysql_fetch_assoc($result) //новая функция, можно ее использовать
Чтобы получить значение из какой-то конкретной ячейки:
mysql_result($result, int row, string field) //указываем номер записи и имя поля mysql_num_rows($result)//считаем количество записей mysql_num_fields($result)//считаем кол-во полей mysql_field_name($result, int field)//узнаем имя поля
Есть еще ситуация. Мы посылаем что-то на UPDATE или на DELETE. Результат вернет нам либо true, либо false. Но мы не знаем, сколько записей изменилось (или удалилось). Для этого есть функция mysql_affected_rows. Она вернет число записей, над которыми были совершены действия.
Еще ситуация. В таблице базы данных есть поле auto_increment. Мы внесли запись, и тут же хотим использовать id этой записи в коде (например, в сессии). Для этого есть функция mysql_insert_id — возвращает id последней записи.