我有类似的代码,没有错误,但当我尝试查询我的数据库时,我得到了几个错误。有人可以帮忙吗?
错误:
注意:未定义的变量:第22行的C:\ wamp64 \ www \ twitter clone \ functions.php中的链接
警告:mysqli_query()要求参数1为mysqli,在第22行的C:\ wamp64 \ www \ twitter clone \ functions.php中给出null
警告:mysqli_num_rows()要求参数1为mysqli_result,在第24行的C:\ wamp64 \ www \ twitter clone \ functions.php中给出null
代码;
<?php
session_start();
$link = mysqli_connect("localhost", "root", "pass", "twitter");
if (mysqli_connect_errno()) {
print_r(mysqli_connect_error());
exit();
}
if (isset($_GET['function']) == "logout"){
session_unset();
}
function displayTweets($type) {
if ($type == 'public'){
$whereClause = "";
}
$query = "SELECT * FROM tweets ".$whereClause." ORDER BY 'datetime' DESC LIMIT 10";
$result = mysqli_query($link, $query);
if (mysqli_num_rows($result) == 0) {
echo "No Tweets";
}
}
?>
答案 0 :(得分:1)
问题是您的$link
变量不在函数的本地范围内。
解决此问题的方法是在函数的本地范围内定义变量,方法是在函数中添加以下行:
global $link
请查看this page以了解有关PHP中变量范围的更多信息。
编辑:
更好的方法是通过将连接添加为函数的参数来注入连接,这将使您的代码看起来像这样:
function displayTweets($type, $connection) {
if ($type == 'public'){
$whereClause = "";
}
$query = "SELECT * FROM tweets ".$whereClause." ORDER BY 'datetime' DESC LIMIT 10";
$result = mysqli_query($connection, $query);
if (mysqli_num_rows($result) == 0) {
echo "No Tweets";
}
}
在此之后,您可以使用displayTweets('public',$link)
调用您的函数,其中'public'是类型,$link
是您定义的连接
此外,在您当前的函数中,$whereClause
可能未定义。我猜你已经意识到这一点,只是想说出来,以防万一你遇到错误。
答案 1 :(得分:0)
你必须在displayTweets函数中使用$ link变量作为全局变量($ GLOBALS [&#39; link&#39;]),否则你必须传递$ link作为参数。
$ result = mysqli_query($ GLOBALS [&#39; link&#39;],$ query);
或
displayTweets(&#39;公共&#39;,$链路);