mysqli_query上的未定义变量

时间:2017-11-29 17:41:13

标签: php html css mysqli twitter

我有类似的代码,没有错误,但当我尝试查询我的数据库时,我得到了几个错误。有人可以帮忙吗?

错误:

  

注意:未定义的变量:第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";
    }
}

?>

2 个答案:

答案 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;,$链路);