Переход с функций 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'];
}