Предупреждение: mysqli_query() ожидает, что параметр 1 будет mysqli, null указан в
Я пытаюсь создать простую пользовательскую CMS, но я получаю сообщение об ошибке:
Предупреждение: mysqli_query() ожидает, что параметр 1 будет MySQLi, null указан в
Почему я получаю эту ошибку? Весь мой код уже MySQLi, и я использую два параметра, а не один.
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
//check connection
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL:" . mysqli_connect_error();
}
function getPosts() {
$query = mysqli_query($con,"SELECT * FROM Blog");
while($row = mysqli_fetch_array($query))
{
echo "<div class=\"blogsnippet\">";
echo "<h4>" . $row['Title'] . "</h4>" . $row['SubHeading'];
echo "</div>";
}
}
Ответы
Ответ 1
Как уже упоминалось в комментариях, это проблема определения. В частности, $con
не входит в объем вашей функции getPosts
.
Вы должны передать объект подключения в качестве зависимости, например
function getPosts(mysqli $con) {
// etc
Я также очень рекомендую остановить выполнение, если ваше соединение завершится с ошибкой. Что-то вроде этого должно быть достаточно
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
if (mysqli_connect_errno()) {
throw new Exception(mysqli_connect_error(), mysqli_connect_errno());
}
getPosts($con);
Ответ 2
используйте глобальную область действия на $con и поместите ее внутри своей функции getPosts()
так.
function getPosts() {
global $con;
$query = mysqli_query($con,"SELECT * FROM Blog");
while($row = mysqli_fetch_array($query))
{
echo "<div class=\"blogsnippet\">";
echo "<h4>" . $row['Title'] . "</h4>" . $row['SubHeading'];
echo "</div>";
}
}
Ответ 3
Функция getPosts()
, кажется, ожидает, что $con
будет глобальной, но вы не объявляете ее как таковой.
Многие программисты рассматривают лысые глобальные переменные как "запах кода". Альтернатива на другом конце шкалы - это всегда передавать ресурс соединения. Промежуток между ними - это однопользовательский вызов, который всегда возвращает один и тот же дескриптор ресурса.
Ответ 4
Рекомендовать использовать global $con;
в теле функции.