Сумрачный блог Кирилла Панфилова

Основы работы с MySQL в PHP

Соединение с базой данных в двух словах сводится к следующему:

$db_server = 'сервер баз данных (обычно localhost)';
$db_user = 'пользователь/администратор';
$db_password = 'пароль';
$db_name = 'имя базы';
$connected = @mysql_connect($db_server, $db_user, $db_password);
if($connected) {
	$select_db = mysql_select_db($db_name);
	if(!$select_db) die('No DB connection');
	}
else {
	die('No DB connection');
	}

Этот код следует держать в отдельном файле (например, db.php) и включать однократно при помощи require_once('db.php'). Предположим, что база данных уже есть (её проще всего создать при помощи phpMyAdmin или другого инструмента). Далее требуется создать таблицу, в которой будут храниться данные. Например, таблица для пользователей и их паролей, в которой также хранятся уникальные идентификаторы пользователей и их электронные адреса:

$query_create = mysql_query("CREATE TABLE `users` (
  `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR( 255 ) NOT NULL ,
  `email` VARCHAR( 255 ) NOT NULL ,
  `password` VARCHAR( 255 ) NOT NULL ,
  PRIMARY KEY ( `id` ) 
  )");

Все поля не могут быть пустыми (NOT NULL), число идентификатора автоматически увеличивается на единицу при создании нового пользователя (AUTO_INCREMENT), поля могут быть не только типов INT (целое число), VARCHAR (разеые символы), но и LONGTEXT (длинный текст), DATETIME (дата и время) и т.п.

В функцию PHP mysql_query() в двойных кавычках помещается тело запроса; принято названия полей и таблиц MySQL писать в обратных кавычках, а переменные PHP внутри тела запроса в одинарных кавычках. Первичный ключ, по которому можно идентифицировать запись — id, как о том говорит PRIMARY KEY.

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

$table = "users";

и с этой переменной работать.

Далее рассмотрены основные типы запросов, без которых невозможно обойтись.


1. Запись данных: INSERT

Допустим, мы приняли данные из формы:

$name = @$_POST['name'];
$password = @$_POST['password'];
$email = @$_POST['email'];

Теперь эти данные запишем как новую строку БД:

$result = mysql_query("INSERT INTO `$table` (`name`, `password`, `email`) VALUES ('$name', '$password', '$email')");

В первых скобках указывается порядок полей, во вторых записываемые значения.


2. Чтение данных: SELECT

Самый популярный тип запроса, извлекающий нужные данные из БД. Допустим, нужно извлечь все данные о пользователе по известному имени, хранящемуся в переменной $login:

$query = mysql_query("SELECT * FROM `$table` WHERE `name` = '$login'");

Звёздочка обозначает «всё». Оператор WHERE — условие. Условия можно группировать, а выбирать только определённые типы полей:

$query = mysql_query("SELECT `name`, `email` FROM `$table` WHERE `name` = '$login' OR `name` = '$login2'");

Теперь, когда мы запросили данные, они хранятся в т.наз. ресурсе, содержащемся в переменной $query (её можно называть как угодно). Ресурс может содержать одну строку (если совпадение по условию одно), а может и несколько (допустим, если мы запросили все данные без условий:

$query = mysql_query("SELECT * FROM `$table`");

то запрос вернёт всю информацию обо всех пользователях).

Если мы точно знаем, что запрос вернул одну строку с результатом, то достаточно прочитать данные из ресурса и занести в массив:

$sets = mysql_fetch_array($query);

Теперь у нас есть массив, названия ключей которого совпадают с полями из таблицы, например, $sets['email'] хранит в себе электронный адрес того пользователя, который был «прочитан» из базы.

Функция mysql_fetch_array() выбирает из ресурса по одной строке за раз, поэтому для обращения ко всем строкам нужно считывать данные из ресурса циклом:

$emails = array();
while($set = mysql_fetch_array($query)) {
  $emails[] = $set['email'];
  }

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

Чтобы упорядочить данные ещё на этапе запроса, можно сразу сортировать их:

$query = mysql_query("SELECT * FROM `$table` ORDER BY `id` DESC");

— в данном случае будет происходить обратная (DESC) сортировка по идентификатору (ORDER BY `id`) пользователей.


3. Обновление данных: UPDATE

В этом случае следует не забывать указывать, какие именно данные мы хотим обновить, чтобы не обновились все данные.

Допустим, мы получили новый электронный адрес ($new_email = @$_POST['new_email'];) для пользователя с идентификатором 32, и можем обновить его данные:

mysql_query("UPDATE `$table` SET `email` = '$new_email' WHERE `id` = 32");

Если же требуется обновить не только адрес, но и имя (допустим, $new_name = @$_POST['new_name'];), то запрос примет форму

mysql_query("UPDATE `$table` SET `email` = '$new_email', `name` = '$new_name' WHERE `id` = 32");

Т.е. мы обновляем существующие поля новыми значениями.


4. Удаление данных: DELETE

В этом случае следует не забывать указывать, какие именно данные мы хотим удалить, чтобы не удалились все данные.

Допустим, нам передали в переменную $id_to_delete идентификатор пользователя, которого нужно удалить. Теперь мы можем удалить этого пользователя:

$totaldelete = mysql_query("DELETE FROM `$table` WHERE `id` = '$id_to_delete'");

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

Яндекс.Метрика