[英]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]);
}
這似乎打印出每個玩家的名字。 但是,當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學生。 感謝您的耐心等待。
嘗試這個,
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是包含播放器名稱的表的列名。
雖然作為傑森建議,請不要使用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>";
}
當然是假設的當然名稱和其他數據。 您將使用表中的實際字段名稱替換它們
如果要檢索每行中的每一列而不必知道每個列名,可以計算表中的列數。
$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
的后繼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>";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.