Переход с функций mysql_*
Соединение с базойПолучение данных в цикле
Получение данных в массив
Комментарии (30)
На этой странице мы рассмотрим примеры всех типичных случаев работы с mysql в сравнении с традиционным подходом
Соединение с базой
Главное, о чем надо помнить - мы всегда работаем не с функциями mysql_*, а с методами класса.
Поэтому, вместо кода
mysql_connect($host, $user, $pass);
mysql_selectdb($db,);
mysql_query("SET NAMES cp1251",);
мы пишем
include 'safemysql.class.php';
$db = new SafeMysql(array('user' => $user, 'pass' => $pass,'db' => $db, 'charset' => 'cp1251'));
Как видно, при создании класса ему передаётся массив с настройками.
причём все настройки писать не нужно - для тех, что не указаны, будут подставлены дефолтные значения. На домашней машине с рутовым доступом без пароля можно писать просто
$db = new MysqlDB();
В дальнейшем вся работа с базой производится через методы объекта $db. Это совсем несложно, как будет показано на примерах ниже.
Если к этому объекту у нужно обратиться из функции - внутри этой функции просто пишем
global $db;
Далее мы рассмотрим стандартные случаи работы с БД.
Получение данных в цикле
Возьмём хрестоматийный пример работы с mysql:
$result = mysql_query("SELECT * FROM table");
while ($row = mysql_fetch_row($result)){
echo $row['name'];
}
при работе с классом у нас есть два варианта, как его переписать.
В случае, когда у нас слишком много данных, чтобы записывать их в массив, или при записи данные надо каким-то образом обработать, код получается почти таким же:
$result = $db->query("SELECT * FROM table");
while ($row = $db->fetch($result)){
echo $row['name'];
}
Здесь мы не получаем экономии на коде, но получаем все плюсы нашего класса - безопасность, обработку ошибок и пр.
Получение данных в массив
Куда интереснее второй вариант - когда нам нужно записать данные из БД в массив.
Вот тут-то мы сразу сокращаем код в 4 раза! Вместо
$data = array();
$result = mysql_query("SELECT * FROM table");
while ($row = mysql_fetch_row($result)){
$data[] = $row;
}
Пишем всего одну строчку -
$data = $db->getAll("SELECT * FROM table");
Далее (скорее всего - в шаблоне) перебираем полученный массив через foreach:
foreach ($data as $row){
echo $row['name'];
}
Написать комментарий
Пожалуйста, воздержитесь от посылки спама.
Сообщения, содержащие гиперссылки, проходят премодерацию.