我认为这只是我之前没遇到的事情!
$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 [] = $行[ '用户名'];
有人能告诉我为什么会这样吗? 另外,我写的代码是否应该列出查询中的每个用户名? 感谢
答案 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仍然认为它是相同的。