警告:mysqli_query()期望参数1是mysqli,null中给出
我正在尝试构build一个简单的自定义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
不在getPosts
函数的范围内。
你应该传递你的连接对象作为依赖,例如
function getPosts(mysqli $con) { // etc
如果连接失败,我也强烈build议停止执行。 像这样的东西应该足够了
$con=mysqli_connect("localhost","xxxx","xxxx","xxxxx"); if (mysqli_connect_errno()) { throw new Exception(mysqli_connect_error(), mysqli_connect_errno()); } 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
是全局的,但是你并不是这样声明的。
很多程序员把秃顶的全局variables看作是“代码味道”。 规模另一端的替代方法是始终传递连接资源。 两者之间的一个单独的调用总是返回相同的资源句柄。
build议使用global $con;
在function体内。