2

我已经决定为我的家人建立一个梦幻足球网站,但我无法从数据库中返回多行。

我想要的是:进行一次 sql 调用并获取整个玩家列表,以便我可以填充一个对象或对象列表。(如果可以返回整张桌子,那就太好了……)。我的目标是让可供选择的球员列表简单地显示给用户。

目前,通过以下方法进行测试时,我可以在一定程度上看到一些结果(来源:来自 php docs...)。但是,我不禁对正在发生的事情感到迷茫。我无法在我的大脑中理解这一点。

// My query
$sql = mysql_query("SELECT * FROM players");

//$data = mysql_fetch_array($sql);
while ($row = mysql_fetch_array($sql, MYSQL_NUM)) {
    printf("Name: %s <br/>", $row[1]);
}

这似乎打印了每个玩家的名字。然而,当 while 循环迭代时,'mysql_fetch_array()' 如何迭代每一行?此外,由于有多个列,我如何访问每一列......这是否必须进行硬编码,例如:

while ($row = mysql_fetch_array($sql, MYSQL_NUM)) {
    printf("Name: %s <br/>", $row[1]);
    printf("Team: %s <br/>", $row[2]);
    ..
    .
    printf("Team: %s <br/>", $row[5]);
}

最终,我将用将相关日期存储在名册对象或其他东西中的代码替换打印语句:

class Roster(){

    $playerName;
    $team;
    $etc.
}

上面的 while 循环方法感觉既困难又笨重。有没有更好的方法来访问所有返回的行?其他人会如何尝试呢?我有限的经验是 C# 和 sql server,它可以通过一些轻松的配置来做一些惊人的事情......立即返回一个列表 ^

如果我不清楚,我会尽快回来查看并进一步评论。我还是个CS学生。感谢您的耐心等待。

4

4 回答 4

4

尝试这个,

 while($row_data = mysql_fetch_array($row_data))
 {
  $row_player_name = $row_data['column_name_player'];
  $row_team = $row_data['column_team'];
  echo $row_player_name;
  echo $row_team;
}

column_name_player 是包含玩家名称的表的列名。

于 2013-01-02T05:24:04.127 回答
3

尽管正如 Jason 建议的那样,请不要使用 mysql_* 函数。但只是为了澄清你的概念

        // My query
        $sql = mysql_query("SELECT * FROM players");

        //$data = mysql_fetch_array($sql);

        while ($row = mysql_fetch_array($sql, MYSQL_NUM)) {
                printf("Name: %s <br/>", $row[1]);
        }

这对于初学者来说是不必要的复杂。而不是使用像 1 或 2 或 3 这样的行索引,您可以(并且可能应该)简单地使用您的字段名称。

所以更新它喜欢

        // My query
        $sql = mysql_query("SELECT * FROM players");

        //$data = mysql_fetch_array($sql);

        while ($row = mysql_fetch_assoc($sql)) {
                echo "Name:". $row["name"];
                echo "Other Data:". $row["otherdata"];
                echo "<br>";
        }

当然,名称其他数据只是假设的。您将用表中的实际字段名称替换它们

于 2013-01-02T05:25:55.740 回答
2

如果您想检索每一行中的每一列,而不必知道每一列的名称,您可以计算表中的列数。

$queryCols = "SHOW COLUMNS FROM players":
$queryPlayers = "SELECT * FROM players";
$result = mysql_query($queryPlayers);
$playerColumns = mysql_query($queryCols);
$colsResult = mysql_fetch_row($playerCols);
$numFields = count($colsResult);
while ($row = mysql_fetch_array($result)) {
  for ($i = 0; $i < $numFields; $i++) {
    $row[$i]; // Each column in each row
  }
}

这是一个选择语句的示例,它是即将被弃用mysqli的继承者: mysql_* statements

$DB_NAME = 'test';
$DB_HOST = 'localhost';
$DB_USER = 'root';
$DB_PASS = '';

$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

if (mysqli_connect_errno()) {
 printf('Connection to $s using %s@$s failed: %s\n', 
  $DB_NAME, $DB_USER, $DB_HOST, mysqli_connect_error());
 exit();
}

$query = "SELECT `fname`, `lname`, `team` FROM `players`;";

if ($stmt = $mysqli->prepare($query)) {
 $stmt->execute();
 $stmt->bind_result($fname, $lname, $team);
 $table = <<< TABLE
<table border="1">
  <thead><tr>
   <th>First Name</th><th>Last Name</th><th>Team</th>
  </tr></thead>
  <tbody>
TABLE;
 while ($stmt->fetch()) {
  $table .= "<tr><td>$fname</td><td>$lname</td><td>$team</td></tr>";
 }
 $table .= "</tbody></table>";
 printf($table);
 $stmt->close();
} else {
  printf("Prepared Statement Error: %s\n", $mysqli->error);
}

桌子

CREATE TABLE IF NOT EXISTS `players` (
  `id` int(20) NOT NULL AUTO_INCREMENT,
  `fname` varchar(32) NOT NULL,
  `lname` varchar(32) NOT NULL,
  `team` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;

INSERT INTO `players` (`id`, `fname`, `lname`, `team`) VALUES
(1, 'Peyton', 'Manning', 'Denver Broncos'),
(2, 'Matt', 'Ryan', 'Atlanta Falcons'),
(3, 'Tom', 'Brady', 'New England Patriots'),
(4, 'Colin', 'Kaepernick', 'San Francisco 49ers'),
(5, 'Matt', 'Schaub', 'Houston Texans'),
(6, 'Aaron', 'Rodgers', 'Green Bay Packers'),
(7, 'Joe', 'Flacco', 'Baltimore Ravens'),
(8, 'Robert', 'Griffin III', 'Washington Redskins'),
(9, 'Andrew', 'Luck', 'Indianapolis Colts'),
(10, 'Matt', 'Flynn', 'Seattle Seahawks'),
(11, 'Andy', 'Dalton', 'Cincinnati Bengals'),
(12, 'Christian', 'Ponder', 'Minnesota Vikings');

结果:

First Name  Last Name   Team
Peyton      Manning     Denver Broncos
Matt        Ryan        Atlanta Falcons
Tom         Brady       New England Patriots
Colin       Kaepernick  San Francisco 49ers
Matt        Schaub      Houston Texans
Aaron       Rodgers     Green Bay Packers
Joe         Flacco      Baltimore Ravens
Robert      Griffin III Washington Redskins
Andrew      Luck        Indianapolis Colts
Matt        Flynn       Seattle Seahawks
Andy        Dalton      Cincinnati Bengals
Christian   Ponder      Minnesota Vikings
于 2013-01-02T05:25:49.733 回答
0

//This function will print 5 rows 10 columns 

$n = 5; 
$m = 10;
$tr='';
	
 for($r=0; $r<$n; $r++)
  {
	$td='';		
		
   for ($c=0; $c<$m; $c++)
        {
		$td = $td."<td>".$c.$r."</td>";
		}
			
	   $tr =$tr."<tr>".$td. "</tr>";
	}

	echo $otp = "<table border='0'>".$tr."</table>";

于 2017-02-09T10:57:57.747 回答