it-swarm.com.ru

Предупреждение: mysqli_query () ожидает, что параметр 1 будет mysqli, ноль задан в

Я пытаюсь создать простую пользовательскую CMS, но получаю сообщение об ошибке:

Предупреждение: mysqli_query () ожидает, что параметр 1 будет MySQLi, ноль задан в

Почему я получаю эту ошибку? Весь мой код уже 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>";
    }
}
12
Philip

Как уже упоминалось в комментариях, это ограниченная проблема. В частности, $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);
23
Phil

используйте глобальную область видимости в $ 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>";
    }
}
6
user3169490

Кажется, функция getPosts() ожидает, что $con будет глобальной, но вы не объявляете ее как таковую. 

Многие программисты рассматривают лысые глобальные переменные как «запах кода». Альтернатива на другом конце шкалы - всегда передавать ресурс соединения. На полпути между ними находится одиночный вызов, который всегда возвращает один и тот же дескриптор ресурса.

0
staticsan