Функция для получения результатов MySQL в PHP 7

Я борюсь со следующей проблемой. Несколько лет назад я написал функцию для получения результатов MYSQL (несколько строк). До PHP7 этот код работал нормально:

function MultipleRows($query)
{
    global $dbhost, $dbname, $dbuser, $dbpass;
    mysql_connect($dbhost, $dbuser, $dbpass)
        or die("Error! Couldn't <b>Connect</b>.");

    mysql_select_db($dbname)
        or die("Error! Couldn't <b>Select database</b>.");

    $result = mysql_query($query)
        or die("Error! Couldn't execute query.");

    if(($result)&&(mysql_num_rows($result)>0))
    {
        return $result;
    } else {
        return false;
    }
    mysql_close();
}

Теперь в PHP7 этот код больше не работает. После долгих поисков я придумал это как замену, но, к сожалению, это не работает:

function MultipleRows($query)
{
    $mysqli = new mysqli($dbhost, $dbpass, $dbuser, $dbname); 

    $result = mysqli_fetch_all($mysqli->query($query), MYSQLI_ASSOC);
    return $result;
    $mysqli->close();
}

Функция предназначена для работы с кодом следующим образом:

$res_test = MultipleRows("SELECT id, name FROM table");

if($res_test)
{
    while($res = mysql_fetch_array($res_test))
    {
        echo $res['id'].' '.$res['name'];
    }
}

Это не очень хорошая возможность переписать "код дисплея" (последний фрагмент), потому что в этом случае мне нужно переписать много строк на моем сайте. Кто может помочь мне в этом? Заранее спасибо!

2 ответа

Решение

mysql расширение было удалено из PHP 7 после того, как устарело в PHP 5.x.

Вы могли бы переписать функцию MultipleRows() с помощью mysqli следующее:

function MultipleRows($query)
{
    global $dbhost, $dbpass, $dbuser, $dbname;
    $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); 
    $result = $mysqli->query($query);
    if ($result !== FALSE)
      $result = $result->fetch_all(MYSQLI_ASSOC);
    $mysqli->close();
    return $result;
}

Несколько замечаний:

  • не стоит использовать глобальные переменные ($dbhost, $dbuser, $dbpass а также $dbname)
  • этот способ обработки запросов к базе данных делает вас уязвимыми для атак с использованием SQL-инъекций

Не подключайтесь каждый раз, когда вы делаете запрос! Вы должны подключиться только один раз на каждом запросе страницы.

Другие вопросы по тегам