Подключение к MySQL-серверу объекта mysqli в режиме MYSQLI_CLIENT_COMPRESS

Рейтинг: 1Ответов: 1Опубликовано: 22.06.2011

Пишу CLI утилиту на PHP. С MySQL работаю через библиотеку mysqli. Использую mysqli в объектном режиме. Скрипт подключается к удаленной серверу MySQL и читает из базы кучу информации (до 500 Мб). Возникает острая необходимость уменьшить трафик между скриптом и MySQL-сервером. Логичнее всего это делать используя подключение с компрессией MYSQLI_CLIENT_COMPRESS.

Вопрос заключается в следующем: как, используя класс mysqli, поднять подключение через MYSQLI_CLIENT_COMPRESS? Ведь, подключение подымается при создании объекта (в конструкторе), а там негде устанавливать флаг компрессии.

Он устанавливается в mysqli_real_connect(), но, к возможному моменту использования этой функции, подключение уже инициировано конструктором mysqli.

Процедурный стиль работы с mysqli прошу не предлагать. Если других вариантов нет - это очевидно.

Ответы

▲ 1Принят

У mysqli в объектном режиме есть real_connect(...). Гляньте на последний возможный параметр - flags, через него можно передать MYSQLI_CLIENT_COMPRESS

$mysqli = new mysqli();
$mysqli->real_connect('localhost', 'root', '1', 'tmp_data', 3306, NULL, MYSQLI_CLIENT_COMPRESS));

printf("Server version: %s\n", $mysqli->server_info);

Если не указывать в конструкторе параметров, то он пытается подключиться с параметрами по-умолчанию, поэтому вместо конструктора целесообразно использовать mysqli_init() (в данном случаем он не будет пытаться подключиться), так как mysql::init() - вовсе не static метод (поэтому вызвать его, по-моему, можно только унаследовавшись от класса mysqli и в конструкторе вызвать его как parent::init(), хотя хрен редьки не слаще - класс-наследник все равно придется создать через new).

С использованием mysqli_init() это будет выглядеть так:

$mysqli = mysqli_init();
$mysqli->real_connect('localhost', 'root', '1', 'tmp_data', 3306, NULL, MYSQLI_CLIENT_COMPRESS));

printf("Server version: %s\n", $mysqli->server_info);

P.S. Посмотрите в сторону PDO, может понравится :)