Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 警告:mysqli_query()要求参数1为mysqli,中给出的为null_Php_Mysqli - Fatal编程技术网

Php 警告:mysqli_query()要求参数1为mysqli,中给出的为null

Php 警告:mysqli_query()要求参数1为mysqli,中给出的为null,php,mysqli,Php,Mysqli,我正在尝试构建一个简单的自定义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

我正在尝试构建一个简单的自定义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=mysqli_connect(“localhost”、“xxxx”、“xxxx”、“xxxxx”);
//检查连接
if(mysqli\u connect\u errno($con))
{
echo“未能连接到MySQL:”.mysqli_connect_error();
}
函数getPosts(){
$query=mysqli_query($con,“从博客中选择*);
while($row=mysqli\u fetch\u数组($query))
{
回声“;
回显“$行[“标题]”。$行[“副标题]”;
回声“;
}
}
函数
getPosts()
似乎希望
$con
是全局的,但您没有这样声明


许多程序员把全局变量视为“代码气味”。规模的另一端的替代方案是始终传递连接资源。介于两者之间的是一个单例调用,它总是返回相同的资源句柄。

如评论中所述,这是一个范围问题。具体来说,
$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);

在$con上使用全局作用域,并将其放入getPosts()函数中 像这样

函数getPosts(){ 全球$con; $query=mysqli_query($con,“从博客中选择*); while($row=mysqli\u fetch\u数组($query)) { 回声“; 回显“$行[“标题]”。$行[“副标题]”; 回声“; } }
如何访问
getPosts
函数?如何向其传递
$con
变量?这是一个范围问题。您需要将
$con
传递到
getPosts()
,所以在mysql中不需要这样做?出于某种原因,这种情况只会发生在mysqli上?如果未将
$link\u identifier
参数传递给
MySQL\u query
等函数,则(不推荐使用的)MySQL扩展将使用最后一个已知的连接。MySQLi扩展没有提供这样的便利。
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>";
    }
}