Функция для получения результатов 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-инъекций
Не подключайтесь каждый раз, когда вы делаете запрос! Вы должны подключиться только один раз на каждом запросе страницы.