Офис НП AMWAY в Ярославле
Купить продукцию Амвей в Ярославле
На карте Купить AMWAY в ЯрославлеПриобрести высококачественную продукцию Амвей в Ярославле, получить консультации по бизнесу, заказать продукцию или получить заказ:
Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
Телефон: +7 (920) 112-00-91
Email: matyxho@mail.ru
Сайт: https://www.amway.ru/user/lebedem
Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Программирование » PHP-Fusion: переход с mysql на mysqli, дубль 2
Сниппет
Что ж, вновь небольшая статья о переводе PHP-Fusion с mysql на mysqli, теперь, правда, уклон на ооп
PHP-Fusion: переход с mysql на mysqli, дубль 2
Опубликовал  Pisatel Pisatel Добавлено  13-08-2015 15:24 13 Август 2015 15:24:34 10958  Прочтений 10958 Прочтений
Обновлено: 27-08-2015 12:38 Обновлено: 27 августа 2015 12:38:32  printer
В предыдущей статье мы уже рассмотрели возможность перевода PHP–Fusion с расширения mysql_* на mysqli_*. Однако в мануале сказано, что нежелательно "скрещивать" oop и процедурный стили, поэтому ниже приведу пример более "правильного" перевода. Итак, поехали:

Открываем файл maincore.php, ищем:

Код: PHP
// Establish mySQL database connection

$link = dbconnect($db_host, $db_user, $db_pass, $db_name);

unset($db_host, $db_user, $db_pass);




Заменяем на:

Код: PHP
// New establish mySQL database connection

_DB::connectDB($db_host, $db_user, $db_pass, $db_name); // подключились

unset($db_host, $db_user, $db_pass);




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

Ниже ищем функции работы с бд:

Код: PHP
// MySQL database functions

function dbquery($query) {

global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;



$query_time = get_microtime();

$result = @mysql_query($query);

$query_time = substr((get_microtime() - $query_time),0,7);



$mysql_queries_time[$mysql_queries_count] = array($query_time, $query);



if (!$result) {

echo mysql_error();

return false;

} else {

return $result;

}

}



function dbcount($field, $table, $conditions = "") {

global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;



$cond = ($conditions ? " WHERE ".$conditions : "");

$query_time = get_microtime();

$result = @mysql_query("SELECT Count".$field." FROM ".$table.$cond);

$query_time = substr((get_microtime() - $query_time),0,7);



$mysql_queries_time[$mysql_queries_count] = array($query_time, "SELECT COUNT".$field." FROM ".$table.$cond);



if (!$result) {

echo mysql_error();

return false;

} else {

$rows = mysql_result($result, 0);

return $rows;

}

}



function dbresult($query, $row) {

global $mysql_queries_count, $mysql_queries_time;



$query_time = get_microtime();

$result = @mysql_result($query, $row);

$query_time = substr((get_microtime() - $query_time),0,7);



$mysql_queries_time[$mysql_queries_count] = array($query_time, $query);



if (!$result) {

echo mysql_error();

return false;

} else {

return $result;

}

}



function dbrows($query) {

$result = @mysql_num_rows($query);

return $result;

}



function dbarray($query) {

$result = @mysql_fetch_assoc($query);

if (!$result) {

echo mysql_error();

return false;

} else {

return $result;

}

}



function dbarraynum($query) {

$result = @mysql_fetch_row($query);

if (!$result) {

echo mysql_error();

return false;

} else {

return $result;

}

}



function dbconnect($db_host, $db_user, $db_pass, $db_name) {

global $db_connect;



$db_connect = @mysql_connect($db_host, $db_user, $db_pass);

$db_select = @mysql_select_db($db_name);

if (!$db_connect) {

die("<strong>Unable to establish connection to MySQL</strong><br />".mysql_errno()." : ".mysql_error());

} elseif (!$db_select) {

die("<strong>Unable to select MySQL database</strong><br />".mysql_errno()." : ".mysql_error());

}

}




Заменяем их на новые:

Код: PHP
 // New MySQL database functions

function dbm_result($res, $row, $field=0) {

$res->data_seek($row);

$datarow = $res->fetch_array();

return $datarow[$field];

}

function dbquery($query) {

global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;

$query_time = START_TIME;

if (!$result = _DB::$linkes->query($query)) {

echo _DB::$linkes->error;

return FALSE;

} else {

$query_time = substr((START_TIME - $query_time),0,7);

$mysql_queries_time[$mysql_queries_count] = array($query_time, $query);

return $result;

}

}



function dbcount($field, $table, $conditions = "") {

global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;

$cond = ($conditions ? " WHERE ".$conditions : "");

$query_time = START_TIME;

if (!$result = _DB::$linkes->query("SELECT COUNT".$field." FROM ".$table.$cond)) {

echo _DB::$linkes->error;

return FALSE;

} else {

$query_time = substr((START_TIME - $query_time),0,7);

$mysql_queries_time[$mysql_queries_count] = array($query_time, "SELECT COUNT".$field." FROM ".$table.$cond);

$rows = dbm_result($result, 0);

return $rows;

}

}



function dbresult($query, $row) {

global $mysql_queries_count, $mysql_queries_time;

$query_time = START_TIME;

if (!$result = dbm_result($query, $row)) {

echo _DB::$linkes->error;

return FALSE;

} else {

$query_time = substr((START_TIME - $query_time),0,7);

$mysql_queries_time[$mysql_queries_count] = array($query_time, $query);

return $result;

}

}



function dbrows($query) {

$result = $query->num_rows;

return $result;

}



function dbarray($query) {

if (!$result = $query->fetch_assoc()) {

echo _DB::$linkes->error;

return FALSE;

} else {

return $result;

}

}



function dbarraynum($query) {

if (!$result = $query->fetch_row()) {

echo _DB::$linkes->error;

return FALSE;

} else {

return $result;

}

}

class _DB

{

static $linkes;

public static function connectDB($host, $user, $pass, $name)

{

if (empty(self::$linkes)) {

self::$linkes = new mysqli($host, $user, $pass, $name);

if (self::$linkes->connect_errno) {

die("<strong>Unable to establish connection to MySQL:</strong><br />".self::$linkes->connect_error);

}

//self::$linkes->set_charset("win1251");

// ^ раскомментировать при необходимости

// если в utf-8, меняем win1251 на utf8

}

}

}




Закрыли файл maincore.php. Далее открываем файл themes/templates/footer.php, ищем:

Код: PHP
mysql_close($db_connect);




Заменяем на:

Код: PHP
_DB::$linkes->close();




Аналогично файл print.php, ищем:

Код: PHP
mysql_close($db_connect);




Заменяем на:

Код: PHP
_DB::$linkes->close();




Теперь открываем файл includes/error_handling_include.php

Ищем:

Код: PHP
  $errorId = mysql_insert_id();




Заменяем на:

Код: PHP
  $errorId = _DB::$linkes->insert_id;




UPDATE: Далее — форум. Открываем файл forum/postreply.php

Ищем:

Код: PHP
  $post_id = mysql_insert_id();




Заменяем на:

Код: PHP
  $post_id = _DB::$linkes->insert_id;




Открываем файл forum/options.php

Ищем:

Код: PHP
  $del_posts = mysql_affected_rows();




Заменяем на:

Код: PHP
  $del_posts = _DB::$linkes->affected_rows;




Открываем файл forum/postnewthread.php, в нем нужно будет произвести три замены.

Ищем:

Код: PHP
  $thread_id = mysql_insert_id();

$post_id = mysql_insert_id();

$forum_poll_id = mysql_insert_id();




Заменяем на:

Код: PHP
  $thread_id = _DB::$linkes->insert_id;

$post_id = _DB::$linkes->insert_id;

$forum_poll_id = _DB::$linkes->insert_id;




Открываем файл forum/viewforum.php, в нем нужно будет произвести две замены.

Ищем:

Код: PHP
  $deleted_posts = mysql_affected_rows();

$deleted_threads = mysql_affected_rows();




Заменяем на:

Код: PHP
  $deleted_posts = _DB::$linkes->affected_rows;

$deleted_threads = _DB::$linkes->affected_rows;




Это пока все, что обнаружил для замены. По мере обнаружения буду дополнять. Вероятнее всего, небольшие изменения могут понадобиться в сторонних модах и плагинах. Если кто–то сможет перевести PHP–Fusion с расширения mysql_* на mysqli_* более грамотно и изящно — милости прошу отписать в комментариях.

После изменений скорость увеличилась (время загрузки снизилось в среднем на 0,02с), так что это еще один довод в пользу перевода своего сайта с mysql_* на mysqli_*.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:   
Последние активные темы форума
  Темы Просмотров Ответов Последние сообщения
folder Вопрос по переделке bb-кода
PHP, MySQL
22367 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
68744 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
15389 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
17926 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
145213 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
14440 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
22590 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
26302 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
7676 0 Pisatel
15. июня 2015
folder Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
37063 32 Pisatel
26. апреля 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
11827 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
31070 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
128778 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
8857 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
23222 13 Pisatel
03. апреля 2015