За последние 24 часа нас посетили 21110 программистов и 1022 робота. Сейчас ищут 857 программистов ...

Попытки переделать работу с MySQL на PHP 7.3

Тема в разделе "Сделайте за меня", создана пользователем КТ815, 29 окт 2021.

  1. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Здравствуйте!
    Работал на PHP 5.4 файл, который вытаскивал последние 10 новостей из таблицы базы данных в RSS-файл. И при переходе на версию PHP 7.3 этот файл перестал функциклировать.
    Код не сложный для меня был на старой версии, но вот не новой весии PHP не могу сладить.

    Разобрался, что теперь нужно коннектиться через $connection = mysqli_connect( )
    Но застрял на mysqli_query, и как заменить все остальное теперь не представляю.
    Уже запутался, прошу помочь.

    Вот сам код:
    PHP:
    1.  $feedPath = "news.xml";
    2.  
    3.   $rssTitle = "    ";  // The title of your rss feed.
    4.   $rssLink = "    ";  // A link to your website.
    5.   $rssDesc = "    ";  // A description of your feed.
    6.  
    7.   // MYSQL database connection settings
    8.  
    9.  $dbServer = "    ";  // Server for mysql database (usually localhost).
    10.   $dbName = "    ";  // Name of the database.
    11.   $dbUser = "    ";  // Username for the database.
    12.   $dbPass = "    ";  // Password for the database.
    13.  
    14.   // Table settings
    15.  
    16.   $tableName = "    ";  // The name of the table to feed.
    17.   $tableKey = "    ";  // The name of the field that holds primary keys
    18.   $tableTitle = "    ";  // The name of the field that holds the title
    19.   $tableDate = "    ";  // The name of the field that holds the formatted date
    20.   $tableDesc = "    ";  // The name of the field that holds the description
    21.   $tableText = "    ";  // The name of the field that holds the description
    22.   $tablePicture = "    ";  // Изображение для новости
    23.  
    24.   // Создание стартового блока
    25.   //Дата в формате RFC 2822 http://www.faqs.org/rfcs/rfc2822.html $buildDate = date("r");
    26.  
    27.   $startBlock =  '<?xml version="1.0" encoding="utf-8" ?>';
    28.   $startBlock .= '<description>' . $rssDesc . '</description>';
    29.   $startBlock .= '<lastBuildDate>' . $buildDate . '</lastBuildDate>';
    30.  
    31.   // Создание конечного блока
    32.   $endBlock .= '</rss>';
    33.  
    34.   // Коннект к базе данных
    35.   mysql_connect($dbServer,$dbUser,$dbPass);
    36.   mysql_selectdb($dbName);
    37.   mysql_set_charset( 'utf8' );
    38.  
    39.   // Последние 10 новостей
    40.  
    41.   $sql = "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " DESC LIMIT 10";
    42.   $result = mysql_query($sql);
    43.   $num = mysql_num_rows($result);
    44.  
    45.   // Cycle through last 10 news articles and add them to the item block array.
    46.   $itemBlock = array("");
    47.  
    48.   for($i=0; $i<$num; $i++) {
    49.  
    50.   $newsID = mysql_result($result, $i, $tableKey);
    51.   $newsTitle = mysql_result($result, $i, $tableTitle);
    52.   $newsDate = mysql_result($result, $i, $tableDate);
    53.   $newsDesc = mysql_result($result, $i, $tableDesc);
    54.   $newsText = mysql_result($result, $i, $tableText);
    55.   $newsDesc = htmlspecialchars($newsDesc);
    56.   $newsDate = date("r");
    57.  
    58.   //Создание переменных
    59.    $title = '<title>' . $newsTitle . '</title>';
    60.   $desc = '<description>' . $newsDesc . '</description>';
    61.   $text = '<full-text>' . $newsText . '</full-text>';
    62.   $link = '<link>' . $newsLink . ' ' . $newsID . '</link>';
    63.   $pubDate = '<pubDate>' . $newsDate . '</pubDate>';
    64.      
    65.   //Вывод в файл
    66.   array_push($itemBlock, '<item>');
    67.   array_push($itemBlock, $title);
    68.   array_push($itemBlock, $link);
    69.   array_push($itemBlock, $desc);
    70.   array_push($itemBlock, $pubDate);
    71.   array_push($itemBlock, $text);
    72.   array_push($itemBlock, '</item>');
    73.   }
    74.  
    75.   // Запись результата в файл
    76.   $file = $feedPath;
    77.   $file = fopen($file, "w");
    78.   fwrite($file, $startBlock);
    79.   $length = count($itemBlock);
    80.   for($i = 0; $i < $length; $i++) {
    81.   fwrite($file, $itemBlock[$i]);
    82.   }
    83.   fwrite($file, $endBlock);
    84.   fclose($file);
     
    #1 КТ815, 29 окт 2021
    Последнее редактирование модератором: 29 окт 2021
  2. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Начал с этого:
    PHP:
    1. $connection = mysqli_connect($dbServer, $dbName, $dbPass, $dbUser);
    2.  
    3.  $sql = "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " DESC LIMIT 10";
    4.  $result = mysqli_query($sql);
    чем далее заменить mysql_result и как понять правильно ли делаю?
     
    #2 КТ815, 29 окт 2021
    Последнее редактирование модератором: 29 окт 2021
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Есть такое гениальное изобретение человечества, называется документация
    https://php.net/mysqli_query
    --- Добавлено ---
    https://www.php.net/mysqli_connect - параметры у mysqli_connect в другом порядке.

    А вообще, 7.3 уже тоже старая. 8.1 на носу
     
  4. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    За ссылки конечно спасибо. Что-то я уже сам нашел.
    Вот только слишком сложно для меня это становится. Да и рубрику нашел "Сделайте за меня"
    Я конечно пытаюсь сам разобраться, но видимо последствия этой КОВИДлы долго будут сказываться.
     
  5. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Вот что получилось, но не работает
    PHP:
    1. // Connect to the database.
    2.   $connection = mysqli_connect($dbServer, $dbName, $dbPass, $dbUser);
    3.   $connect->query("SET NAMES 'utf8' ");
    4.     // Берем последние 10 новостей.
    5.   $result = mysqli_query($connect, "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " DESC LIMIT 10");
    6.   $num = mysqli_num_rows($result);
    7.  
    8.   // Cycle through last 10 news articles and add them to the item block array.
    9.  
    10.   $itemBlock = array("");
    11.  
    12.   for($i=0; $i<$num; $i++) {
    13.  
    14.   $newsID = mysqli_result($result, $i, $tableKey);
    15.   $newsTitle = mysqli_result($result, $i, $tableTitle);
    16.   $newsDate = mysqli_result($result, $i, $tableDate);
    17.   $newsDesc = mysqli_result($result, $i, $tableDesc);
    18.   $newsText = mysqli_result($result, $i, $tableText);
    19.   $newsLink = $rssLink;
    20.  
    21.   //Вывод в файл
    22.   array_push($itemBlock, '<item>');
    23.   array_push($itemBlock, $title);
    24.   array_push($itemBlock, $link);
    25.   array_push($itemBlock, $desc);
    26.   array_push($itemBlock, $pubDate);
    27.   array_push($itemBlock, $text);
    28.   array_push($itemBlock, '</item>');
    29.    }
     
  6. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    КТ815 нравится это.
  7. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Нет. Сейчас посмотрел. Лучше бы у моего файла коннекты к базе переделать, там много всего было сделано и для турбо и прочее.
     
  8. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Нет
     
  9. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Смотрю код: $con=mysqli_connect("example.com","alex","qwerty");
    А это точно будет на PHP 7.3 работать?
     
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Я сто раз так делал
     
  11. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    @КТ815 Я уже тебе намекнул:
    Код (Text):
    1.  
    2. mysqli_connect(
    3. string $hostname = ini_get("mysqli.default_host"),
    4. string $username = ini_get("mysqli.default_user"),
    5. string $password = ini_get("mysqli.default_pw"),
    6. string $database = "",
    7. int $port = ini_get("mysqli.default_port"),
    8. string $socket = ini_get("mysqli.default_socket")
    9. ): mysqli|false
    Вот в таком порядке передаются в функцию mysqli_connect параметры: хост, имя пользователя, пароль, имя базы данных, порт (если нестандартный), сокет (если не стандартный).

    Ты после этого написал код, в котором передаётся хост, имя базы данных, пароль, имя пользователя. И удивляешься что не работает.

    Дальше, откуда ты выудил функцию mysqli_result? Такой функции нету. Да, ты разместил в "сделайте за меня", и я мог проигнорить эту тему, что и буду, в принципе, делать, поскольку этот раздел - это по описанию, помойка для тем тех людей, которые не хотят учиться. Но я даю очень конкретные подсказки, причём тут корона? У нас пол офиса переболело, и нормально работает.
    --- Добавлено ---
    Это не настолько неочевидные вещи, чтоб корона повлияла. Ты же буквы не забыл, очевидно, от неё.
     
    don.bidon нравится это.
  12. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Это я перепутал когда пост писал.
    Вот такая конструкция вроде бы должна работать, но не работает. Что то опять не правильно.

    PHP:
    1. $connect = mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);
    2.  
    3.   $sql = "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " DESC LIMIT 10";
    4.   $result = mysqli_query($sql);
    5.   $num = mysqli_num_rows($result);
    6.   // Cycle through last 10 news articles and add them to the item block array.
    7.  
    8.   $itemBlock = array("");
    9.  
    10.   for($i=0; $i<$num; $i++) {
    11.  
    12.     $newsID = mysqli_fetch_all($result, $i, $tableKey);
    13.     $newsTitle = mysqli_fetch_all($result, $i, $tableTitle);
    14.     $newsDate = mysqli_fetch_all($result, $i, $tableDate);
    15.     $newsDesc = mysqli_fetch_all($result, $i, $tableDesc);
    16.     $newsText = mysqli_fetch_all($result, $i, $tableText);
    17.  
    18.    
    19.   //Вывод в файл
    20.     array_push($itemBlock, '<item>');
    21.     array_push($itemBlock, $title);
    22.     array_push($itemBlock, $link);
    23.     array_push($itemBlock, $desc);
    24.     array_push($itemBlock, $pubDate);
    25.     array_push($itemBlock, $text);
    26.     array_push($itemBlock, '</item>');
    27.  
    28.   }
    --- Добавлено ---
    Почему то mysqli_fetch_all не срабатывает, хотя по документации вроде так
    https://php.ru/manual/mysqli-result.fetch-all.html
     
  13. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Что то заработало. Вот такой код сработал.
    Но не извлекает сами данные. Буду дальше разбираться.
    Вероятно проблема с mysqli_fetch_all

    PHP:
    1. // Connect to the database.
    2.   $connect = mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);
    3.   mysqli_query($connect, "SET NAMES utf8");
    4.  
    5.   $sql = "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " DESC LIMIT 10";
    6.   $result = mysqli_query($connect, $sql);
    7.   $num = mysqli_num_rows($result);
    8.  
    9.   // Cycle through last 10 news articles and add them to the item block array.
    10.  
    11.   $itemBlock = array("");
    12.  
    13.   for($i=0; $i<$num; $i++) {
    14.  
    15.     $newsID = mysqli_fetch_all($result, $i, $tableKey);
    16.     $newsTitle = mysqli_fetch_all($result, $i, $tableTitle);
    17.     $newsDate = mysqli_fetch_all($result, $i, $tableDate);
    18.     $newsDesc = mysqli_fetch_all($result, $i, $tableDesc);
    19.     $newsText = mysqli_fetch_all($result, $i, $tableText);
    20.     $newsLink = $rssLink;
    21.  
    22.     $newsDate = date("r");
    23.  
    24.   //Вывод в файл
    25.     array_push($itemBlock, '<item>');
    26.     array_push($itemBlock, $title);
    27.     array_push($itemBlock, $link);
    28.     array_push($itemBlock, $desc);
    29.     array_push($itemBlock, $pubDate);
    30.     array_push($itemBlock, $text);
    31.     array_push($itemBlock, '</item>');
    32.  
    33.   }
     
    #13 КТ815, 30 окт 2021
    Последнее редактирование: 30 окт 2021
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    https://www.php.net/manual/ru/mysqli-result.fetch-all.php
    Сигнатура другая у функции.
    --- Добавлено ---
    Есть документация, причём даже на русском языке. Ну неужели не прочитать, что делает фунция
    --- Добавлено ---
    Какой смысл дёргать её в цикле?
     
  15. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Не могу подобрать какая функция может подойти для замены.
    Модет mysqli_fetch_field_direct — Получение метаданных конкретного поля?
     
    #15 КТ815, 30 окт 2021
    Последнее редактирование: 30 окт 2021
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    @КТ815. Не нужно искать замену старым функциям. Нужно просто использовать подходящие новые. Сдвинуться от того, что тебе непременно нужно циклом фор перебирать индекс, к примеру. Или сообразить, что если mysqli_fetch_all возвращает все результаты в виде массива, можно её один раз дёрнуть перед этим циклом.
    --- Добавлено ---
    И дальше брать элементы этого массива
     
  17. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Вообщем одну ошибку нашел из-за чего у меня выводилось что 10 строк но нет данных.
    Это происходит если в запросе прописано DESC, что у меня и оставалось со старой версии.
    $sql = "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " DESC LIMIT 10";
    Нужно писать $sql = "SELECT * FROM " . $tableName . " ORDER BY " . $tableKey . " LIMIT 10";
    Как убрал - так сразу вывелись данные. Буду копать дальше.
     
  18. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    Теперь вопрос как взять последние 10 новостей. Все работает, но только выборка происходит первых 10 новостей.
     
  19. КТ815

    КТ815 Новичок

    С нами с:
    29 окт 2021
    Сообщения:
    14
    Симпатии:
    0
    DESC - выводит "последние" записи (ASC - выводит "первые") - похоже это теперь в PHP7 не работает.
    Как бы отсортировать таблицу по ключу-дате, когда последняя новость будет первой в таблице?