Забыли пароль?
Запросите новый здесь.

Автор темы: Pisatel
ID темы: 2535
Информация:
Тема содержит 18 сообщения, была просмотрена 18635 раз.
Просмотр темы
PHP-Fusion Russia » Поддержка 7 версии » Моды
 Распечатать тему
Перевод PHP-Fusion 7.02.xx с расширения mysql_* на mysqli_*
Pisatel
Зачем? С PHP 5.5.0 расширение mysql_* считается устаревшим и будет удалено в следующих версиях. К тому же, mysqli_* работает быстрее (имхо)
Предупреждение: Все манипуляции выполняются на свой страх и риск. Не забываем сделать бекап!
Открываем файл maincore.php, ищем:
Загрузить источник  GeSHi: PHP
  1. // Establish mySQL database connection
  2. $link = dbconnect($db_host, $db_user, $db_pass, $db_name);
Добавлено за 0.022 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. // New establish mySQL database connection
  2. _DB::connectDB($db_host, $db_user, $db_pass, $db_name); // подключились
Добавлено за 0.021 секунд, используя GeSHi 1.0.8.10

Ниже ищем функции работы с бд:
Загрузить источник  GeSHi: PHP
  1. // MySQL database functions
  2. function dbquery($query) {
  3. global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;
  4.  
  5. $query_time = get_microtime();
  6. $result = @mysql_query($query);
  7. $query_time = substr((get_microtime() - $query_time),0,7);
  8.  
  9. $mysql_queries_time[$mysql_queries_count] = array($query_time, $query);
  10.  
  11. if (!$result) {
  12. echo mysql_error();
  13. return false;
  14. } else {
  15. return $result;
  16. }
  17. }
  18.  
  19. function dbcount($field, $table, $conditions = "") {
  20. global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;
  21.  
  22. $cond = ($conditions ? " WHERE ".$conditions : "");
  23. $query_time = get_microtime();
  24. $result = @mysql_query("SELECT Count".$field." FROM ".$table.$cond);
  25. $query_time = substr((get_microtime() - $query_time),0,7);
  26.  
  27. $mysql_queries_time[$mysql_queries_count] = array($query_time, "SELECT COUNT".$field." FROM ".$table.$cond);
  28.  
  29. if (!$result) {
  30. echo mysql_error();
  31. return false;
  32. } else {
  33. $rows = mysql_result($result, 0);
  34. return $rows;
  35. }
  36. }
  37.  
  38. function dbresult($query, $row) {
  39. global $mysql_queries_count, $mysql_queries_time;
  40.  
  41. $query_time = get_microtime();
  42. $result = @mysql_result($query, $row);
  43. $query_time = substr((get_microtime() - $query_time),0,7);
  44.  
  45. $mysql_queries_time[$mysql_queries_count] = array($query_time, $query);
  46.  
  47. if (!$result) {
  48. echo mysql_error();
  49. return false;
  50. } else {
  51. return $result;
  52. }
  53. }
  54.  
  55. function dbrows($query) {
  56. $result = @mysql_num_rows($query);
  57. return $result;
  58. }
  59.  
  60. function dbarray($query) {
  61. $result = @mysql_fetch_assoc($query);
  62. if (!$result) {
  63. echo mysql_error();
  64. return false;
  65. } else {
  66. return $result;
  67. }
  68. }
  69.  
  70. function dbarraynum($query) {
  71. $result = @mysql_fetch_row($query);
  72. if (!$result) {
  73. echo mysql_error();
  74. return false;
  75. } else {
  76. return $result;
  77. }
  78. }
  79.  
  80. function dbconnect($db_host, $db_user, $db_pass, $db_name) {
  81. global $db_connect;
  82.  
  83. $db_connect = @mysql_connect($db_host, $db_user, $db_pass);
  84. $db_select = @mysql_select_db($db_name);
  85. if (!$db_connect) {
  86. die("<strong>Unable to establish connection to MySQL</strong><br />".mysql_errno()." : ".mysql_error());
  87. } elseif (!$db_select) {
  88. die("<strong>Unable to select MySQL database</strong><br />".mysql_errno()." : ".mysql_error());
  89. }
  90. }
Добавлено за 0.028 секунд, используя GeSHi 1.0.8.10

Заменяем их на новые:
Загрузить источник  GeSHi: PHP
  1. // New MySQL database functions
  2. function dbm_result($res, $row, $field=0) {
  3. $res->data_seek($row);
  4. $datarow = $res->fetch_array();
  5. return $datarow[$field];
  6. }
  7. function dbquery($query) {
  8. global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;
  9. $query_time = START_TIME;
  10. if (!$result = _DB::$linkes->query($query)) {
  11. echo _DB::$linkes->error;
  12. return FALSE;
  13. } else {
  14. $query_time = substr((START_TIME - $query_time),0,7);
  15. $mysql_queries_time[$mysql_queries_count] = array($query_time, $query);
  16. return $result;
  17. }
  18. }
  19.  
  20. function dbcount($field, $table, $conditions = "") {
  21. global $mysql_queries_count, $mysql_queries_time; $mysql_queries_count++;
  22. $cond = ($conditions ? " WHERE ".$conditions : "");
  23. $query_time = START_TIME;
  24. if (!$result = _DB::$linkes->query("SELECT COUNT".$field." FROM ".$table.$cond)) {
  25. echo _DB::$linkes->error;
  26. return FALSE;
  27. } else {
  28. $query_time = substr((START_TIME - $query_time),0,7);
  29. $mysql_queries_time[$mysql_queries_count] = array($query_time, "SELECT COUNT".$field." FROM ".$table.$cond);
  30. $rows = dbm_result($result, 0);
  31. return $rows;
  32. }
  33. }
  34.  
  35. function dbresult($query, $row) {
  36. global $mysql_queries_count, $mysql_queries_time;
  37. $query_time = START_TIME;
  38. if (!$result = dbm_result($query, $row)) {
  39. echo _DB::$linkes->error;
  40. return FALSE;
  41. } else {
  42. $query_time = substr((START_TIME - $query_time),0,7);
  43. $mysql_queries_time[$mysql_queries_count] = array($query_time, $query);
  44. return $result;
  45. }
  46. }
  47.  
  48. function dbrows($query) {
  49. $result = $query->num_rows;
  50. return $result;
  51. }
  52.  
  53. function dbarray($query) {
  54. if (!$result = $query->fetch_assoc()) {
  55. echo _DB::$linkes->error;
  56. return FALSE;
  57. } else {
  58. return $result;
  59. }
  60. }
  61.  
  62. function dbarraynum($query) {
  63. if (!$result = $query->fetch_row()) {
  64. echo _DB::$linkes->error;
  65. return FALSE;
  66. } else {
  67. return $result;
  68. }
  69. }
  70. class _DB
  71. {
  72. static $linkes;
  73. public static function connectDB($host, $user, $pass, $name)
  74. {
  75. if (empty(self::$linkes)) {
  76. self::$linkes = new mysqli($host, $user, $pass, $name);
  77. if (self::$linkes->connect_errno) {
  78. die("<strong>Unable to establish connection to MySQL:</strong><br />".self::$linkes->connect_error);
  79. }
  80. //self::$linkes->set_charset("win1251"); // раскомментировать при необходимости
  81. // если в utf-8, меняем win1251 на utf8
  82. }
  83. }
  84. }
Добавлено за 0.025 секунд, используя GeSHi 1.0.8.10

Закрыли файл maincore.php. Далее открываем файл themes/templates/footer.php, ищем:
Загрузить источник  GeSHi: PHP
  1. mysql_close($db_connect);
Добавлено за 0.019 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. _DB::$linkes->close();
Добавлено за 0.019 секунд, используя GeSHi 1.0.8.10

Аналогично файл print.php, ищем:
Загрузить источник  GeSHi: PHP
  1. mysql_close($db_connect);
Добавлено за 0.019 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. _DB::$linkes->close();
Добавлено за 0.019 секунд, используя GeSHi 1.0.8.10

Теперь открываем файл includes/error_handling_include.php
Ищем:
Загрузить источник  GeSHi: PHP
  1. $errorId = mysql_insert_id();
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. $errorId = _DB::$linkes->insert_id;
Добавлено за 0.019 секунд, используя GeSHi 1.0.8.10

UPDATE: Далее - форум. Открываем файл forum/postreply.php
Ищем:
Загрузить источник  GeSHi: PHP
  1. $post_id = mysql_insert_id();
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. $post_id = _DB::$linkes->insert_id;
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

Открываем файл forum/options.php
Ищем:
Загрузить источник  GeSHi: PHP
  1. $del_posts = mysql_affected_rows();
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. $del_posts = _DB::$linkes->affected_rows;
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

Открываем файл forum/postnewthread.php, в нем нужно будет произвести три замены.
Ищем:
Загрузить источник  GeSHi: PHP
  1. $thread_id = mysql_insert_id();
  2. $post_id = mysql_insert_id();
  3. $forum_poll_id = mysql_insert_id();
Добавлено за 0.021 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. $thread_id = _DB::$linkes->insert_id;
  2. $post_id = _DB::$linkes->insert_id;
  3. $forum_poll_id = _DB::$linkes->insert_id;
Добавлено за 0.020 секунд, используя GeSHi 1.0.8.10

Открываем файл forum/viewforum.php, в нем нужно будет произвести две замены.
Ищем:
Загрузить источник  GeSHi: PHP
  1. $deleted_posts = mysql_affected_rows();
  2. $deleted_threads = mysql_affected_rows();
Добавлено за 0.021 секунд, используя GeSHi 1.0.8.10

Заменяем на:
Загрузить источник  GeSHi: PHP
  1. $deleted_posts = _DB::$linkes->affected_rows;
  2. $deleted_threads = _DB::$linkes->affected_rows;
Добавлено за 0.022 секунд, используя GeSHi 1.0.8.10

Это пока все, что обнаружил для замены. По мере обнаружения буду дополнять. Здоровая критика приветствуется.
ЧоПачом?. Чуть поясню: я объявил глобальной (без явного присвоения) переменную $linkes для того, чтобы к ней (к подключению) можно было обращаться внутри функций работы с бд и в любом другом месте работы скрипта. Фактически, можно было обойтись без класса, но тогда ссылку на подключение нам пришлось бы объявлять глобальной в каждой функции работы с бд, т.к. расширение mysqli_* этого требует (в отличии от mysql_*, в котором этот параметр был необязательным).


Изменил(а) Pisatel, 27.08.2015 12:53
Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Polarfox
А инфы "зачем?" не будет?


Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Pisatel
Эмм... С PHP 5.5.0 расширение mysql_* считается устаревшим и будет удалено в следующих версиях. Это- официально "зачем". А неофициально- ради спортивного интереса.


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
SchreiBear
Pisatel, я лично за.. только сразу бы в utf-8 пери клепал.. по скольку постольку с 9 версией всё ровно это уже будет

мог бы тоже пару переделанных функций выложить


Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
Polarfox
Просто такую инфу желательно прикреплять в пост, чтоб всем было понятно зачем все это.


Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
x1
 
Pisatel
-DEL-


Изменил(а) Pisatel, 27.08.2015 12:55
Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Pisatel
SchreiBear, и? Подобного в сети полно, можно кучу притащить. Давай подробнее: чопачом, чокуда.


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
SchreiBear
а что тут особо говорить... я вот так делал..и работало без ошибок. мне легче с классами работать..


Изменил(а) SchreiBear, 14.08.2015 14:20
Нужно сказать огромное спасибо людям, которые живут на популярных девелопер форумах и дают там адекватные ответы на абсолютно «нубские» вопросы без попыток унизить вопрошающего.
 
Pisatel
SchreiBear, после правки это стало классом, не спорю )


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rush
PolarFox написал:

А инфы "зачем?" не будет?

странный вопрос, хотя бы по тому что mysql уже deprecated, а mysqli быстрее


 
Web
Polarfox
Вот из таких мелочей складывается качественное комьюнити и русская поддержка в частности.
Когда незнающий человек не должен гадать - зачем он это делает, и нужно ли ему это.
Вообщемта я об этом.


Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Pisatel
Исправил ошибку, первый пост обновил


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rush
PolarFox написал:

Вот из таких мелочей складывается качественное комьюнити и русская поддержка в частности.
Когда незнающий человек не должен гадать - зачем он это делает, и нужно ли ему это.
Вообщемта я об этом.


я думаю человек который задался целью сменить mysql на mysqli в курсе что это и зачем. если он не знает - то ему это нафиг и не надо


 
Web
Polarfox
Да ну, доп инфа никому не мешала, и возможно заинтересует кого.


Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле. | Вся бесплатная тех. поддержка только на форуме
 
Pisatel
Господа, со всем уважением, но данные прения уже бессмысленны. Первый пост обновил, добавил информацию.

Объединено 27.08.2015 15:56:
Нашел новые места для замены, первый пост обновил.


Изменил(а) Pisatel, 27.08.2015 12:56
Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rush
ух, как же меня передергивает от статических переменных dg


 
Web
Pisatel
Rush, дык я ж за: кто сможет сделать более изящно - милости прошу. А так эти замечания... моветон, не более. Как грица, п*здеть - не мешки ворочать))


Переполз на WP, но PF - это как первая любовь, которая не забывается...
 
Web
Rush
из фьюжика конфетку не сделаешь)


x1 x1
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Топ 5 пользователей форума
Zaxap Zaxap (1,090)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)   SchreiBear SchreiBear (625)