我决定为我的家人建立一个幻想足球的网站,但我很难从数据库中返回多行。
我想要的是:进行单个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]);
}
这似乎打印了每个玩家的名字。但是怎么做 当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]);
}
最终,我将使用将相关日期存储在名单对象中的代码替换print语句:
class Roster(){
$playerName;
$team;
$etc.
}
上面的while循环方法感觉很困难和笨重。有没有更好的方法来访问所有返回的行?别人怎么会这样呢?我有限的经验是C#和sql server,它可以通过一些轻松的配置做一些惊人的事情......立即返回列表^
如果我不清楚,我会尽快回来查看。我还是一名CS学生。感谢您的耐心等待。
答案 0 :(得分: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是包含播放器名称的表的列名。
答案 1 :(得分:3)
虽然作为杰森建议,请不要使用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>";
}
仅限假设名称和其他数据。您将使用表
中的实际字段名称替换它们答案 2 :(得分: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
答案 3 :(得分: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>";
&#13;