警告:mysqli_query() 期望参数 1 为 mysqli,null 在

2022-08-30 20:50:28

我正在尝试构建一个简单的自定义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

正如评论中提到的,这是一个范围问题。具体来说,不在函数范围内。$congetPosts

您应该将连接对象作为依赖项传入,例如

function getPosts(mysqli $con) {
    // etc

我还强烈建议在连接失败或发生错误时暂停执行。像这样的东西应该足够了

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // throw exceptions
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");

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>";
    }
}

推荐