我正在尝试构建一个简单的自定义CMS,但是出现错误:
警告:mysqli_query() 期望参数 1 是 MySQLi,空值在
为什么我会收到此错误?我所有的代码都已经是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
我还强烈建议在连接失败或发生错误时停止执行。这样的事情应该就足够了
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // throw exceptions
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx");
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
是全局的,但您并没有这样声明它。
许多程序员将光头全局变量视为"代码气味"。规模另一端的替代方法是始终传递连接资源。介于两者之间的是始终返回相同资源句柄的单一实例调用。