簡體   English   中英

如何使用mysql從php中的表中返回多行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM