一个表中的多行

时间:2012-12-13 23:39:53

标签: php sql arrays row fetch

我试图从数据库中回应出两件事,为什么这不起作用?以及我如何让这个工作。我只是在学习php,所以如果这是一个非常愚蠢的问题我抱歉。

$result = mysql_query("SELECT user_id, team FROM users WHERE username = '$username'");
while($row = mysql_fetch_array($result))
$user_id = $row['user_id'];
$team = $row['team'];

echo = $user_id;
echo = $team;`

我很感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:3)

你应该使用括号对这样的代码进行分组:

$result = mysql_query("SELECT user_id, team FROM users WHERE username = '$username'");
while($row = mysql_fetch_array($result))
{
    $user_id = $row['user_id'];
    $team = $row['team'];

    echo $user_id;
    echo $team;
}

答案 1 :(得分:0)

正如tpaksu已经提到的那样,你需要围绕你想要循环执行的语句的括号。

其次,echo的正确格式是

echo $user_id;

另外两个相当基本的评论

  • mysql调用已弃用,这意味着它们已被更新的替代品(特别是mysqli或更好的PDO)取代。不要浪费时间学习如何使用mysql *系列调用,切换到mysqli或最好是PDO 现在
  • "SELECT user_id, team FROM users WHERE username = '$username'");这样的SQL语句,其中一个变量按原样包含在SQL语句中,这对SQL injection来说是一个巨大的风险。你可以浪费宝贵的时间来设计各种聪明的方案,以便在包含变量之前对变量进行消毒,或者你可以学习以唯一正确的方式去做,也就是说,使用prepared statements。乍一看可能不那么直观,但你会很快习惯。

这会将您的代码转换为以下内容:

<?php
  $stmt = $dbh->prepare("SELECT user_id, team FROM users WHERE username = ?");
  if ($stmt->execute(array($username))) {
    while ($row = $stmt->fetch()) {
      $user_id = $row['user_id'];
      $team = $row['team'];

      echo $user_id;
      echo $team;
    }
  }
?>

这是注射证明并使用最新技术。作为额外的副作用,适应其他品牌的数据库会更容易。