Офис НП 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
В предыдущей статье мы уже рассмотрели возможность перевода PHP–Fusion с расширения mysql_* на mysqli_*. Однако в мануале сказано, что нежелательно "скрещивать" oop и процедурный стили, поэтому ниже приведу пример более "правильного" перевода. Итак, поехали:
Открываем файл maincore.php, ищем:
Заменяем на:
То есть, мы воспользовались функцией из класса ниже для подключения к бд и сразу инициировали подключение. В теории подключение должно произойти один раз, сколько бы раз мы не дернули файл.
Ниже ищем функции работы с бд:
Заменяем их на новые:
Закрыли файл maincore.php. Далее открываем файл themes/templates/footer.php, ищем:
Заменяем на:
Аналогично файл print.php, ищем:
Заменяем на:
Теперь открываем файл includes/error_handling_include.php
Ищем:
Заменяем на:
UPDATE: Далее — форум. Открываем файл forum/postreply.php
Ищем:
Заменяем на:
Открываем файл forum/options.php
Ищем:
Заменяем на:
Открываем файл forum/postnewthread.php, в нем нужно будет произвести три замены.
Ищем:
Заменяем на:
Открываем файл forum/viewforum.php, в нем нужно будет произвести две замены.
Ищем:
Заменяем на:
Это пока все, что обнаружил для замены. По мере обнаружения буду дополнять. Вероятнее всего, небольшие изменения могут понадобиться в сторонних модах и плагинах. Если кто–то сможет перевести PHP–Fusion с расширения mysql_* на mysqli_* более грамотно и изящно — милости прошу отписать в комментариях.
После изменений скорость увеличилась (время загрузки снизилось в среднем на 0,02с), так что это еще один довод в пользу перевода своего сайта с mysql_* на mysqli_*.
Открываем файл 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_*.
Понравилась статья?
Метки для данной статьи
Похожие статьи
Заголовок
Категория
Просмотров
Поделиться:
Последние активные темы форума
Темы | Просмотров | Ответов | Последние сообщения | |
Вопрос по переделке bb-кода PHP, MySQL |
22367 | 5 | Pisatel 26. мая 2017 |
|
Вопросы по Ajax форме обратной связи CMS PHP Fusion |
68744 | 48 | Ditrin 19. февраля 2017 |
|
BBCode YouTube Video Colorbox mod CMS PHP Fusion |
15389 | 2 | Pisatel 10. декабря 2016 |
|
Как лучше создать собственную страницу? CMS PHP Fusion |
17926 | 17 | Pisatel 11. мая 2016 |
|
Небольшие вопросы по скриптам магазина и катало... PHP, MySQL |
145213 | 80 | Pisatel 11. января 2016 |
|
BBCode Code mod CMS PHP Fusion |
14440 | 0 | Pisatel 31. августа 2015 |
|
Ajax Like Dislike Article Panel CMS PHP Fusion |
22590 | 16 | Pisatel 07. июля 2015 |
|
Хлебные крошки / BreadCrumbs SEO Panel CMS PHP Fusion |
26302 | 17 | Pisatel 04. июля 2015 |
|
Abbr Description BBCode CMS PHP Fusion |
7676 | 0 | Pisatel 15. июня 2015 |
|
Плагин Email рассылки Mail To All by Pisatel CMS PHP Fusion |
37063 | 32 | Pisatel 26. апреля 2015 |
|
Подозрительный трафик и прочие страшилки Всякая хрень |
11827 | 2 | Ditrin 23. апреля 2015 |
|
Мод Newsletter - рассылка писем пользователям с... CMS PHP Fusion |
31070 | 13 | Pisatel 10. апреля 2015 |
|
Мод отправки писем PHPMailer для PHP-Fusion CMS PHP Fusion |
128778 | 113 | Ditrin 06. апреля 2015 |
|
Появление неизвестного файла subscriptions.php CMS PHP Fusion |
8857 | 2 | Pisatel 06. апреля 2015 |
|
Autoban on IP CMS PHP Fusion |
23222 | 13 | Pisatel 03. апреля 2015 |