Работа с базами данных в php. Модуль MySQL
Если раньше (до php 5.0) можно было использовать более-менее тривиальный способ работы с базами данных в php (через модуль MySQL), то с новыми версиями php приходится переходить к новым модулям, таким как mysqli или pdo. Модуль MySQL deprecated в php 5.5.x и вскоре будет полностью исключен.
В этой заметке напомним, как использовать модуль MySQL, но использовать современные интерфейсы для работы (см. следующие заметки). Для минимального использования модуля MySQL обязательно нужно помнить всего лишь несколько функций (естественно, их намного больше, здесь представлен только необходимый минимум).
- resource mysql_connect ([ string
$server
= ini_get("mysql.default_host") [, string$username
= ini_get("mysql.default_user") [, string$password
= ini_get("mysql.default_password") [, bool$new_link
= false [, int$client_flags
= 0 ]]]]] )
Устанавливает соединение с БД. Например:
$db = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Ошибка соединения: ' . mysql_error());
- bool mysql_select_db ( string
$database_name
[, resource$link_identifier
= NULL ] )
Выбирает БД для работы. Например,
mysql_select_db('db_name') or die('Ошибка выбора БД');
- resource mysql_query ( string $query [, resource $link_identifier = NULL ] )
Посылает запрос на исполнение. Например:
$sql = 'SELECT * FROM db_table';
$query = mysql_query($sql);
- array mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )
$result = mysql_fetch_array($query, MYSQL_ASSOC);
В принципе, это и есть необходимый минимум - в случае существующей БД, этих запросов вполне достаточно для манипулирования данными.Осталась только одна проблема - защита от SQL-иньекций. В данных, полученных от пользователя, могут быть служебные символы, которые используются в запросах, и которые могут привести к ошибкам или даже потери данных (в случае намеренной атаки). Поэтому стоит экранировать полученные данные с помощью функции
- string mysql_real_escape_string ( string
$unescaped_string
[, resource$link_identifier
= NULL ] )
Например,
$string = mysql_real_escape_string("произведение 'Как я провел это лето'");
В результате кавычки будут заэкранированы:
$string == "произведение 'Как я провел это лето'")
Итак, наш пример теперь выглядит следующим образом:
$db = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Ошибка соединения: ' . mysql_error());
mysql_select_db('db_name') or die('Ошибка выбора БД');$sql = 'SELECT * FROM db_table';
$query = mysql_query($sql);
while ($result = mysql_fetch_array($query, MYSQL_ASSOC)) {
echo $result['db_field'];
};