2010-01-13 186 views
0

我在这里遇到一些奇怪的行为。 我正在使用下面的代码来引用Facebook的API。PHP字符串错误

$query = "SELECT msg, user_id, comment_time FROM comments WHERE aid = '$aid' ORDER BY comment_time DESC"; 
     $result = mysql_query($query) or die("ERROR: $query.".mysql_error()); 
     if (mysql_num_rows($result) > 0) { 
      while($row = mysql_fetch_object($result)){ 
       $uidval = $row->user_id; 
       $posterInfo = $facebook->api_client->users_getInfo($uidval, array('name', 'pic_square_with_logo', 'profile_url')); 
       $nameuser = $posterInfo[0]['name']; //this is line 50 
       $pic = $posterInfo[0]['pic_square_with_logo']; 
       $profile_url = $posterInfo[0]['profile_url']; 

       echo '<img src="'.$pic.'" />'; 
       echo '<a href="'.$profile_url.'">'.$nameuser.'</a>'; 
       echo '<br>'; 
       echo $row->comment_time; 
       echo '<br>'; 
       echo $row->msg; 

      } 
     } 

它给了我这个错误:

Fatal error: Cannot use string offset as an array in /home/amitver/public_html/roadies/comments.php on line 50 

但令人惊讶的我正在成功地利用完全相同的代码在我的页面的顶部。为什么这个奇怪的行为。这是页面顶部的代码:

//connect to fB 
    $uid = $user_id; 
    $userInfo = $facebook->api_client->users_getInfo($user_id, array('name', 'pic_square')); 
    $nameuser = $userInfo[0]['name']; 
    $pic = $userInfo[0]['pic_square']; 
+2

你说明这行是#50在源? – pix0r 2010-01-13 20:27:37

+0

您应该避免使用字符串连接来构建查询并生成HTML结果。您的代码中可能存在SQL注入漏洞和/或XSS漏洞。 – 2010-01-13 20:33:08

回答

2

如果$ posterInfo实际上是一个空字符串(''),则会发生这种情况。

你可以在回路中的var_dump($ posterInfo),并检查它在做什么......

+0

它确实是一个空字符串。 – amit 2010-01-13 21:23:55

4

我觉得有时候theusers_getInfo是返回一个数组,而其他时候它返回一个字符串。如果只有一个结果可用,它可能只返回一个简单的字符串。

试试这个:

$nameuser = ($posterInfo[0]) ? $posterInfo[0]['name'] : $posterInfo['name']; 
+0

你可能想'is_array()'不是'isArray()'。 – pix0r 2010-01-13 20:35:00

+0

是的,我意识到这一点。我可能应该检查数组是否包含0键。 – Anthony 2010-01-13 20:42:25

+0

这是一个很好的解决方案 – jspcal 2010-01-13 20:48:51