Я пытаюсь создать простой пользовательский 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>"; } }
Как уже упоминалось в комментариях, это вопрос, охватывающий вопросы. В частности, $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);
используйте глобальную область действия на вашем $ 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>"; } }
Функция getPosts()
кажется, ожидает, что $con
будет глобальным, но вы не объявляете его как таковой.
Многие программисты рассматривают лысые глобальные переменные как «запах кода». Альтернатива на другом конце шкалы – это всегда передавать ресурс соединения. Промежуток между ними – это однопользовательский вызов, который всегда возвращает один и тот же дескриптор ресурса.
Рекомендовать использовать global $con;
в функциональном корпусе.