Конвертировать файл из PHP 5.6 в 7.2

  • Автор темы man_a_ger
  • 35
  • Обновлено
  • 13, May 2024
  • #1
Привет всем, я недавно обновил PHP на своем сервере с версии 5.6 до 7.2, и в Wordpress все работает нормально, но один созданный мною PHP-файл, который отделен от моего основного веб-сайта, теперь не работает.

Это небольшой файл, который подключается к моей базе данных и отображает определенную строку. Теперь страница пуста.

Никаких ошибок или чего-то еще.

Я проверил, переключив PHP обратно на версию 5.6 на сервере, и он снова начал работать.

Я надеялся, что кто-нибудь поможет определить, в чем здесь проблема и какая часть кода заставляет ее работать в 5.6, но не в 7.2. Любая помощь приветствуется!

 

<?php

$regCode = $_GET['regCode'];

if (!$link = mysql_connect('localhost', 'my_userhere', 'mypassword')) {

echo 'Could not connect to mysql';

exit;

}

if (!mysql_select_db('mydatabase_here', $link)) {

echo 'Could not select database';

exit;

}

$sql = "SELECT * from details where regCode like '%$regCode%'";

$result = mysql_query($sql, $link);

if (!$result) {

echo "DB Error, could not query the database\n";

echo 'MySQL Error: ' . mysql_error();

exit;

}

//And we display the results

while($response = mysql_fetch_array( $result ))

{

echo "Code: " .$response['regCode'];

echo "<br> ";

}

$anymatches = mysql_num_rows($result);

if ($anymatches == 0)

{

echo "False";

}

?>

Код (разметка):

man_a_ger


Рег
01 Jan, 2011

Тем
1

Постов
2

Баллов
12
  • 18, May 2024
  • #2
Несколько вещей:
  • Если это имеет какое-либо отношение к Wordpress, используйте это соединение с базой данных для повышения безопасности.

  • Добавьте эти строки, чтобы начать отладку.

     //And we display the results
    $anymatches = mysql_num_rows($result);
    if ($anymatches == 0){
    
    echo "False";
    }
    else {
    
    while($response = mysql_fetch_array( $result )) {
    
    echo "Code: " .$response['regCode'];
    
    echo "<br> ";
    
    }
    }


    PHP:
  • Вероятно, ваш хост заблокировал простые вызовы mysql_query.
     //And we display the results while($response = mysql_fetch_array( $result )) { echo "Code: " .$response['regCode']; echo "<br> "; } $anymatches = mysql_num_rows($result); if ($anymatches == 0){ echo "False"; }
    PHP: The quickest way to get back up and running is to use MySQLi https://www.php.net/manual/en/mysqli.query.php

  • Будьте очень осторожны с тем, что вы делаете с regcode, это основная цель для SQL-инъекции. Если вам повезет, это будет просто ребенок-хакер, который сделает это ради того, чтобы похвастаться, а не кто-то, кто хочет разрушить ваш бизнес.
     $regCode = $_GET['regCode'];
    PHP:
  • Пока вы вносите изменения в эти строки:

     $result = mysql_query($sql, $link);
    PHP: might be better like this

     ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(E_ALL);
    PHP:
 

qTemplier


Рег
27 Mar, 2013

Тем
0

Постов
3

Баллов
3
  • 18, May 2024
  • #3
Версия 7.3 выйдет из строя в декабре.

Возможно, вы захотите одновременно помнить о совместимости с версией 8.0, чтобы при переходе на версию 8.0 вам не пришлось снова что-то исправлять.

Вам следует перейти на использование подготовленных операторов для ВСЕХ вызовов базы данных, даже если используемые данные находятся внутри сайта, таким образом вы не рискуете открыть дыру в безопасности, если источник некоторых данных будет изменен на внешний источник.
 

super18


Рег
14 Feb, 2013

Тем
0

Постов
2

Баллов
2
  • 05, Jun 2024
  • #4
Для простых страниц вы можете использовать инструменты преобразования MySQL в MySQL:
https://www.seabreezecomputers.com/mysql2mysqli/

Это должно работать:
 

<?php

$regCode = $_GET['regCode'];

if (!$link = new mysqli('localhost', 'my_userhere', 'mypassword')) {

echo 'Could not connect to mysql';

exit;

}

if (!$link->select_db('mydatabase_here')) {

echo 'Could not select database';

exit;

}

$sql = "SELECT * from details where regCode like '%$regCode%'";

$result = $link->query($sql);

if (!$result) {

echo "DB Error, could not query the database\n";

echo 'MySQL Error: ' . $link->error;

exit;

}

//And we display the results

while($response = $result ->fetch_array())

{

echo "Code: " .$response['regCode'];

echo "<br> ";

}

$anymatches = $result->num_rows;

if ($anymatches == 0)

{

echo "False";

}

?>

Код (разметка): Кстати, php7.1 и php7.2 являются EOL. Вам следует использовать php7.3 или php7.4.
 

zerx451


Рег
03 Feb, 2014

Тем
2

Постов
5

Баллов
25
  • 08, Jun 2024
  • #5
Спасибо за ответы всем! Я не знал о существующих инструментах конвертации mysql в mysqli.

Я попробую обновленную версию и посмотрю, как она себя ведет в qwikad.

Если это не сработает, я добавлю код отладки, предоставленный Сарой, и посмотрю, смогу ли я хотя бы отобразить некоторые ошибки.

Я знал, что выпуски 7.1 и 7.2 приближаются к концу, но не осознавал, что это уже произошло.

Отличная информация всем большое спасибо за помощь! Буду держать вас в курсе результатов.
 

CISHost


Рег
20 May, 2014

Тем
1

Постов
3

Баллов
13
  • 08, Jun 2024
  • #6
Спасибо за отличную информацию SpacePhoenix и всем остальным! Я буду иметь в виду обновление PHP до версии 8 в будущем.

Я заметил, что при переключении PHP на 7.3 Wordpress внезапно начинает выдавать некоторые ошибки, поэтому я пока оставляю версию 7.2. Кто-нибудь еще замечал проблемы при переходе на PHP 7.3?
 

jeka_cpa


Рег
04 Jan, 2014

Тем
5

Постов
27

Баллов
77
  • 08, Jun 2024
  • #7
Представленный здесь код приводит меня в ужас по одной простой причине. Отсутствие санитарии. ПРИВЕТ, ИНЖЕКЦИЯ СКРИПТА! Это называется подготовка/выполнение, ИСПОЛЬЗУЙТЕ ЭТО! Вот что происходит, когда вы просто вставляете старый код MySQL в mysqli, и это во многом объясняет, почему я верю в необходимость перерезать шнур и перейти на PDO.
 

<?php

$regCode = $_GET['regCode'];

try {

$db = new PDO(

'mysql:dbname=mydatabasehere;host=localhost',

'my_userhere',

'my_password'

);

} catch (PDOException $e) {

die('Could not connect to MySQL : ', $e->message);

}

$stmt = $db->prepare('

SELECT *

FROM details

WHERE regCode like ?

');

if ($stmt->execute([ '%' . $_GET['regCode'] . '%'])) {

if ($response = $stmt->fetch()) {

do {

echo '

Code: ', $response['regCode'], '<br>';

} while ($response = $stmt->fetch());

} else echo 'No Matches Found';

} else echo '

DB Error, could not query the database<br>

MySQL Error: ', $stmt->errorInfo();

Код (разметка): могут быть опечатки, поскольку я публикую сообщения из поездки, но это гораздо более разумный/рациональный и безопасный подход, чем просто сбрасывать $GET в строку запроса - практика, которую мы должны прекратить делать. ШЕСТНАДЦАТЬ ЧЕРТОВЫХ ЛЕТ НАЗАД!!! Это более чем половина причины, по которой старые функции mysql вообще исчезли! Кроме того, по возможности избегайте строк с двойными кавычками и добавления строк, это неэффективно.
 

elize


Рег
12 Nov, 2015

Тем
1

Постов
3

Баллов
13
Тем
49554
Комментарии
57426
Опыт
552966

Интересно