如何返回多行从表在php中使用mysql


How to return multiple rows from a table in in php using mysql

我决定为我的家人建立一个梦幻足球网站,但我被从数据库返回多行所困。

我想要的:做一个单一的sql调用并获得玩家的整个列表,这样我就可以填充一个对象或对象列表。(如果整张桌子都能归还,那就太好了……)我的目标是有可用的球员名单被起草简单地显示给用户。

目前,我可以通过以下方法测试时看到一些结果(来源:来自php文档…)。然而,我不禁对正在发生的事情感到困惑……我脑子里想不明白这是怎么回事。

// 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]);
}

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

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,它们可以通过一些轻松的配置做一些惊人的事情……立即返回一个列表^

如果我不清楚,我会很快回来并进一步评论。我还是一个计算机科学专业的学生。谢谢您的耐心等待。

试试这个,

 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是包含球员名的表的列名。

虽然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这样的行索引,您可以(而且可能应该)在那里简单地使用您的字段名。

更新为like

        // 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>";
        }

当然nameotherdata只是假设。您将用表

中的实际字段名替换它们

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

$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 select语句的例子,它是即将被弃用的 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

//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>";