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

Phi*_*lip 16 php mysqli

我正在尝试构建一个简单的自定义CMS,但我收到一个错误:

警告:mysqli_query()期望参数1为MySQLi,null为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>";
    }
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*hil 26

正如评论中所提到的,这是一个范围问题.具体而言,$con不在您的getPosts职能范围内.

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

function getPosts(mysqli $con) {
    // etc
Run Code Online (Sandbox Code Playgroud)

如果连接失败,我还强烈建议暂停执行.这样的事情应该足够了

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

getPosts($con);
Run Code Online (Sandbox Code Playgroud)

  • 如果没有将`$ link_identifier`参数传递给像`mysql_query`这样的函数,那么(已弃用的)MySQL扩展将使用最后一个已知的连接.MySQLi扩展提供了这样的便利. (3认同)

小智 8

在你的$ 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>";
    }
}
Run Code Online (Sandbox Code Playgroud)