空数据库行上的未定义变量

时间:2013-04-24 16:01:02

标签: php pdo

当我的数据库行为空时,我收到这个恼人的错误, 但是这些行应该是空的,直到我添加一些值。 任何线索出了什么问题?我尝试通过在变量之前添加@来禁用此问题,但是当它们处于foreach循环时不起作用。

如果我向行添加数据,问题就会停止......

任何想法?

一些代码。

$tweets = new Tweets();     
    foreach($tweets->fetch_tweets($_GET['uid']) as $tweet){
    @$tweet_name = $tweet['username'];
    @$tweet_date= $tweet['date'];
    @$tweet_email= $tweet['email'];

    }
function fetch_tweets($uid){ /*Mine and users   I follow*/

$uid = (int)$uid;
    $query = $this->link->query("SELECT user.id,
  user.email, 
    user.username, 
  tweets.message, 
    tweets.date, 
  userdetails.profile_img, 
    userdetails.firstname, 
  userdetails.lastname, 
    following.id, following.user_id, 
  following.follow_id
    FROM user
    LEFT JOIN following ON user.id = following.user_id 
    JOIN userdetails ON user.id = userdetails.user_id
    JOIN tweets ON userdetails.user_id = tweets.user_id
    WHERE user.id='{$uid}'  OR 
                user.id IN (SELECT follow_id 
                            FROM following 
                            WHERE following.user_id = '{$uid}' )  GROUP BY tweets.date ORDER BY tweets.date DESC "
);
$tweet = array();
while(($row = $query->fetch(PDO::FETCH_ASSOC)) !==FALSE) { 
$tweet[] = $row;
} echo $query->rowCount();
return $tweet; 
}

2 个答案:

答案 0 :(得分:2)

在尝试使用它之前,您需要检查返回的数组是否为空。

$tweets = new Tweets();
$res = $tweets->fetch_tweets($_GET['uid']);
if( empty($res) ) {
    echo "no tweets.";
} else {
    foreach($res as $tweet){
        $tweet_name = $tweet['username'];
        $tweet_date = $tweet['date'];
        $tweet_email= $tweet['email'];
    }
}

此外,您应该在调用之前声明您的函数。在大多数其他语言中,它不是PHP的要求,但它使您的代码更容易阅读。

答案 1 :(得分:0)

在获取行之前,只需运行一个代码来检查行数是否为0