2013-08-26 15 views
-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; 

} 

,undefined是坐落在同一行选择变量.. 我在等待您的帮助。谢谢

回答

0

你有2线,SELECT,但是两者都具有相同的变量:$ 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参数将需要被加入到function Total_Updates($user_ids) =>function Total_Updates($user_ids, $lastid)

0
$loadmore = getUpdates_loadmore($lastid);

实际上,我的脚本看起来完全一样:

public function Updates($user_ids,$lastid) 
{ 
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) 

{ 

     $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(); 
    return $data;  
} 

在第一个$ sql中,变量$ loadmore正确运行,但在第二个$ sql中不起作用。我一直同样的错误:

Notice: Undefined variable

+0

你应该更新你的问题,反映的不是增加一个答案 在你的'功能Total_Updates'这个'$ loadmore'没有定义。如果你一个接一个地调用这些函数,你可以用我的答案中所描述的'global'。 – NiKiZe

+0

非常感谢你NiKiZe你的主张完美运行... –