Офис НП 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 Добавлено  13-08-2015 15:24 13 Август 2015 15:24:34 4620  Прочтений 4620 Прочтений  0 Комментариев 0 Комментариев
Обновлено: 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 Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
11853 33 promask
27. апреля 2019
folder Вопрос по переделке bb-кода
PHP, MySQL
2955 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
11756 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
7362 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
6369 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
49508 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
3773 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
7538 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
8384 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
2768 0 Pisatel
15. июня 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
5206 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
7061 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
37493 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
3483 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
13076 13 Pisatel
03. апреля 2015