致命错误,不太清楚为什么?

时间:2010-06-21 11:20:20

标签: php mysql

我认为这只是我之前没遇到的事情!

$r = $database->currentChallengers($f, $g);
        while($row=mysql_fetch_assoc($r))
        {
            $u[]=$row['username'];
            $i[]=$row['userid'];
            $s[]=$row['streak'];
        }

        for ($i = 0; $i < count($u); $i++)
        {
            foreach ($u as $user)
            {
                echo "Challenger: $u[$i]";
            }
        }

PHP用于以下数据库查询:

function currentChallengers($f, $g)
{
    $q = "SELECT k.userid, k.streak, u.username
          FROM ".TBL_KOTH." k 
          INNER JOIN ".TBL_USERS." u
          ON k.userid = u.id
          WHERE k.format = '$f' && k.game = '$g' && k.king = '0' && k.done = '0'
          ORDER BY k.userid";
    return mysql_query($q, $this->connection);
}

我收到错误

  

致命错误:字符串

不支持[]运算符

在线

  

$ U [] = $行[ '用户名'];

有人能告诉我为什么会这样吗? 另外,我写的代码是否应该列出查询中的每个用户名? 感谢

8 个答案:

答案 0 :(得分:3)

其他答案已经指出了您需要做的事情:使用数组。但在此之前,请检查代码中的其他位置是否正在使用$u等。你可能会遇到麻烦,因为它们可能已经在其他地方使用 - 作为字符串。

而且,你应该真的使用更冗长的变量名来避免构建维护噩梦。为什么不使用例如

        $username[] = $row['username'];
        $userid[]   = $row['userid'];
        $streak[]   = $row['streak'];
    }

答案 1 :(得分:2)

PHP似乎假设您的未初始化变量是字符串。 See Pekka's Answer.尝试在开始将值推送到它们之前初始化/声明这些变量。

$u = array();
$i = array();
$s = array();

答案 2 :(得分:2)

使用有意义的变量名称。 您已使用$ u在此代码上方的某处存储字符串。 可能你在其中存储了一个用户名。

所以我建议使用变量$ username和$ users。

并设置$ users = array();在循环之前,正如Mike /

所提出的那样

答案 3 :(得分:1)

你想用$u[]=$row['username'];做什么? $u当前是一个字符串,您无法写入字符串的特定索引(您还没有指定任何索引)。

如果您尝试将行存储到数组中,请将它们声明为数组并使用迭代变量来填充它。

$u = array();
$i = array();
$s = array();
$k = 0;
while($row=mysql_fetch_assoc($r))
{
  $u[$k] = $row['username'];
  $i[$k] = $row['userid'];
  $s[$k] = $row['streak'];
  $k = $k + 1;
}

答案 4 :(得分:0)

试试这个,而不是数组:

            $u=$row['username'];
            $i=$row['userid'];
            $s=$row['streak'];

答案 5 :(得分:0)

您确定$ u尚未定义吗?用$ u = array()初始化它;在第一个“while”之前......

答案 6 :(得分:0)

问题似乎是因为$ u(可能是$ s和$ i)似乎是一个字符串。

尝试添加:

$u = array();
$s = array();
$i = array();

之前:

$r = $database->currentChallengers($f, $g);

答案 7 :(得分:0)

您应该在访问之前添加$u = array()。您可能在脚本的另一部分中使用其他$ u作为字符串,PHP仍然认为它是相同的。