-4

こんにちは、原因がわからないエラー スクリプトがありますが、変数は定義されています。

 public function Updates($user_ids,$lastid) {
    if($lastid==0)  {
        $loadmore = "";     
    }else{
        $loadmore = " AND M.msg_id < $lastid ";
    }

 public function Total_Updates($user_ids) 

{

$sql = "SELECT M.msg_id, M.uid_fk, M.message, M.created, U.fname, U.lname, M.uploads, M.profile_uid FROM messages M, users U WHERE M.uid_fk=U.uid AND M.uid_fk IN ($user_ids) $loadmore
        UNION
        SELECT M.msg_id, M.uid_fk, M.message, M.created, U.fname, U.lname, M.uploads, M.profile_uid FROM messages M, users U WHERE M.uid_fk=U.uid AND M.profile_uid IN ($user_ids) $loadmore ORDER BY msg_id DESC ";

        $query = mysqli_query($db_conx, $sql);
        $data = mysqli_num_rows($query);
        exit();

    return $data;

}

未定義の変数はSELECTと同じ行にあります..あなたの助けを待っています...ありがとう

4

2 に答える 2

0

SELECT には 2 つの行がありますが、どちらも同じ変数を持っています: $user_ids と $loadmore

エラー メッセージには、警告の内容が表示されます。しかし、$user_ids は正しく宣言されているように見えるため、$loadmore が残ります。

また、function Total_Updates中にあるように見えfunction Updatesますか?

global $loadmore;それが別の関数である場合 (そして単なるコピー ペースト エラーですか?)、おそらく両方の関数の最初に使用したいだけでしょう。

編集:
グローバルを使用するコードへの可能な変更。この関数Updatesでは、常に前に呼び出す必要がありますTotal_Updates

public function Updates($user_ids, $lastid) 
{
    global $loadmore; // Keep available for Total_Updates

    if($lastid==0)  {
        $loadmore = "";     
    }else{
        $loadmore = " AND M.msg_id < $lastid ";
    }
    $db_conx = mysqli_connect("localhost", "root", "", "test");
    $sql = "SELECT M.msg_id, M.uid_fk, M.message, M.created, U.fname, U.lname, M.uploads, M.profile_uid FROM messages M, users U  WHERE M.uid_fk=U.uid AND M.uid_fk IN ($user_ids) $loadmore
            UNION 
            SELECT M.msg_id, M.uid_fk, M.message, M.created, U.fname, U.lname, M.uploads, M.profile_uid FROM messages M, users U  WHERE M.uid_fk=U.uid AND M.profile_uid IN ($user_ids) $loadmore ORDER BY msg_id DESC LIMIT " .$this->postcount;
    $query = mysqli_query($db_conx, $sql);      

    while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)){
        $data[]=$row;
        return $data;
    }
}

public function Total_Updates($user_ids) 
{
    global $loadmore; // From Updates

    $db_conx = mysqli_connect("localhost", "root", "", "test");

    $sql = "SELECT M.msg_id, M.uid_fk, M.message, M.created, U.fname, U.lname, M.uploads, M.profile_uid FROM messages M, users U WHERE M.uid_fk=U.uid AND M.uid_fk IN ($user_ids) $loadmore
            UNION
            SELECT M.msg_id, M.uid_fk, M.message, M.created, U.fname, U.lname, M.uploads, M.profile_uid FROM messages M, users U WHERE M.uid_fk=U.uid AND M.profile_uid IN ($user_ids) $loadmore ORDER BY msg_id DESC ";

    $query = mysqli_query($db_conx, $sql);
    $data = mysqli_num_rows($query);
    exit();  // This is just for test? it disables return.
    return $data;       
}

別の解決策は、loadmore の別の関数を作成することです。例:

public function getUpdates_loadmore($lastid) 
{
    if($lastid==0)  return "";
    return " AND M.msg_id < $lastid ";
}

そして、これを行うには、 $lastid パラメータを=>$loadmore = getUpdates_loadmore($lastid);に追加する必要がありますfunction Total_Updates($user_ids)function Total_Updates($user_ids, $lastid)

于 2013-08-26T00:21:48.220 に答える