Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
 Аватар для U-III
59 / 59 / 12
Регистрация: 24.10.2012
Сообщений: 170

Ускорение переезда с PHP5 на PHP7 связанный с MySQL

21.10.2016, 19:29. Показов 7015. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. На днях решил перевести свой сайт с PHP5 на PHP7.
Создал виртуальный Ubuntu Server 16.04, установил LAMP (Apache 2.4, MySQL 5.7, PHP 7.0.12).
Закинул все необходимые данные (настройки, базы, сайт).
LAMP полностью работал. Но сайт работать отказывался.
Не буду рассказывать как я пользовался отладчиками, как находил ошибки.
Все проблемы были связаны с отсутствием в PHP7 модуля mysql. На его место пришел mysqli.
Простая замена не всегда работала, так как передаваемые переменные в функциях модуля разные.
Жизнь моя упрощалась тем, что работа с базой у меня велась в одном подключаемом файле.
Также я заметил что в PHP7 нет стандартных названий функций для MySQL (mysql_connect,mysql_query и т.д.)
То есть можно создать такие функции самому. Что я и сделал.
В итоге в основном файле для работы с MySQL я поместил следующий код
PHP
1
2
$GLOBALS["MySQL_mod"] = "mysql";
if (PHP_MAJOR_VERSION > 6) {require_once dirname(__FILE__) . "/mysqlfunc7.php";}
Глобальную переменную MySQL_mod я использую для проверки подключенного модуля.
А вот сам текст файла mysqlfunc7.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php 
$GLOBALS["MySQL_mod"] = "mysqli";
function mysql_query($a) {
return mysqli_query($GLOBALS["MySQLconn"],$a);}
function mysql_affected_rows() {
return mysqli_affected_rows($GLOBALS["MySQLconn"]);}
function mysql_set_charset($a) {
return mysqli_set_charset($GLOBALS["MySQLconn"],$a);}
function mysql_error() {
return mysqli_error();}
function mysql_close($a) {
return mysqli_close($a);}
function mysql_num_rows($a) {
return mysqli_num_rows($a);}
function mysql_fetch_array($a) {
return mysqli_fetch_array($a);}
function mysql_fetch_assoc($a) {
return mysqli_fetch_assoc($a);}
function mysql_select_db($a) {
return true;}
function mysql_result($res, $row, $field=0) {
        $res->data_seek($row);
        $datarow = $res->fetch_array();
        return $datarow[$field];}
function mysql_connect($a, $b, $c) {
$GLOBALS["MySQLconn"] = mysqli_connect($a, $b, $c, $base); //$base - желательно объявить переменной модуля
return $GLOBALS["MySQLconn"];}
function mysql_real_escape_string($a) {
return mysqli_real_escape_string($GLOBALS["MySQLconn"],$a);}
Что делает следующий код.
Проверяет версию PHP, если она больше 6 (6 версии ведь не было), то подключает указанный файл.
В котором переназначены все основные процедуры PHP5 для MySQL.
В итоге мой сайт отлично работает как на PHP5, так и на PHP7 без изменения кода.

Данным методом не претендую на уникальность. Но надеюсь данный метод позволит многим перейти на PHP7 очень быстро.
Производительность PHP7 действительно приятно удивляет.

Добавлено через 2 часа 53 минуты
Забыл сказать. У меня работает с одной БД.
Поэтому она сразу выбирается при подключении.
Для тех кому нужны разные БД нужно так.
PHP
1
2
function mysql_select_db($a) {
return mysqli_select_db($GLOBALS["MySQLconn"],$a);}
Ну и все остальные необходимые функции по аналогии.
3
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2016, 19:29
Ответы с готовыми решениями:

PHP7 и запрос добавления данных в MySQL
Добрый день! Столкнулся с некоторыми проблемами после обновления с php5 на php7, а именно, что не выполняется запрос insert into ...

PHP5 -> PHP7
Здраствуйте. Я только начинающий в PHP. У меня есть один сервер, написан на PHP5. Для этого сервера есть различные дополнения и плагины,...

Php5 -> php7
Здравствуйте. решил перевести свой сайт на php7 но проблема в том, что он на myslq и само ядро написано под myslq. Нужно перевести на...

3
 Аватар для U-III
59 / 59 / 12
Регистрация: 24.10.2012
Сообщений: 170
23.11.2016, 21:31  [ТС]
При переводе еще нескольких сайтов добавил
PHP
1
2
function mysql_insert_id() {
return mysqli_insert_id($GLOBALS["MySQLconn"]);}
1
 Аватар для U-III
59 / 59 / 12
Регистрация: 24.10.2012
Сообщений: 170
12.04.2017, 09:15  [ТС]
В связи с изменениями в PHP 7.0.18 и 7.1.4 код немного поменялся, также добавил работу с сокетом
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php 
$GLOBALS["MySQL_mod"] = "mysqli";
function mysql_query($a) {
return mysqli_query($GLOBALS["MySQLconn"],$a);}
function mysql_affected_rows() {
return mysqli_affected_rows($GLOBALS["MySQLconn"]);}
function mysql_set_charset($a) {
return mysqli_set_charset($GLOBALS["MySQLconn"],$a);}
function mysql_error() {
return mysqli_error();}
function mysql_close($a) {
return mysqli_close($a);}
function mysql_num_rows($a) {
return mysqli_num_rows($a);}
function mysql_fetch_array($a) {
return mysqli_fetch_array($a);}
function mysql_insert_id() {
return mysqli_insert_id($GLOBALS["MySQLconn"]);}
function mysql_fetch_assoc($a) {
return mysqli_fetch_assoc($a);}
function mysql_select_db($a) {
return true;}
function mysql_result($res, $row, $field=0) {
        $res->data_seek($row);
        $datarow = $res->fetch_array();
        return $datarow[$field];}
function mysql_connect($a, $b, $c) {
       $h = M_HOST;  
       $p = M_PORT; 
       $s = "";
       if ($a[0] == "/") {
              $h = "";
              $s = $a;
              $p = 0;
       };
       $GLOBALS["MySQLconn"] = mysqli_connect($h, $b, $c,M_BASE,$p,$s);
return $GLOBALS["MySQLconn"];}
function mysql_real_escape_string($a) {
return mysqli_real_escape_string($GLOBALS["MySQLconn"],$a);}
M_HOST, M_PORT и M_BASE у меня объявлены через define
1
0 / 0 / 0
Регистрация: 17.01.2018
Сообщений: 11
17.01.2018, 13:12
Спасибо за пост, подсмотрел реализацию для моего проекта
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2018, 13:12
Помогаю со студенческими работами здесь

Ошибки в PHP5 и PHP7
Зачем в PHP7 введён класс Error, если был Exception?

Голосование php5.6 -> php7.0
Всем здравствуйте. На сайте было голосование. Всё хорошо работало. Два года не было сбоев. Была версия php 5.6 Сейчас переходим на...

Изучать PHP5 или PHP7 ?
Вопрос настоящим гуру PHP :) Я знаю только основы пхп. Сейчас хочу основательней его изучить. И есть у меня на выбор сразу 2 книги одного...

Considering conflict php5 for php7.0 ubuntu 16.04
Суть такая, php5 в принципе не установлен , но при a2enmod php7.0 получаю Considering conflict php5 for php7.0: и apache не...

PHP7 CGI или PHP5 как модуль Apache
Здравствуйте. Вот только такие есть варианты у меня настроить сервер. Не подскажите, что лучше? Сайт работает в обоих вариантах. Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru