【问题标题】:Warning: mysqli_query() expects parameter 1 to be mysqli, null given in警告:mysqli_query() 期望参数 1 为 mysqli,在
【发布时间】:2013-09-18 02:02:17
【问题描述】:

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

【问题讨论】:

  • 你是如何访问getPosts函数的?
  • ..并将$con 变量传递给它?
  • 这是一个范围界定问题。您需要将$con 传递给getPosts()

标签: php mysqli


【解决方案1】:

正如 cmets 中所述,这是一个范围界定问题。具体来说,$con 不在您的 getPosts 函数范围内。

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

function getPosts(mysqli $con) {
    // etc

如果您的连接失败或发生错误,我也强烈建议您暂停执行。这样的东西就足够了

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

getPosts($con);

【讨论】:

  • 所以这在 mysql 中是不需要的?出于某种原因,这只发生在 mysqli 上?
  • 如果$link_identifier 参数未传递给mysql_query 之类的函数,则(已弃用)MySQL 扩展将使用最后一个已知连接。 MySQLi 扩展没有提供这样的便利。
【解决方案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 是全局的,但您并没有这样声明它。

    许多程序员将秃头的全局变量视为“代码气味”。另一端的替代方案是始终绕过连接资源。介于两者之间的是一个始终返回相同资源句柄的单例调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多