2

私は家族のためにファンタジーフットボールのウェブサイトを構築することにしましたが、データベースから複数の行を返すことに行き詰まっています。

私が欲しいのは、単一の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]);
}

最終的には、printステートメントを、関連する日付を名簿オブジェクトなどに格納するコードに置き換えます。

class Roster(){

    $playerName;
    $team;
    $etc.
}

上記のwhileループの方法は、難しくて不格好な感じがします。返されたすべての行にアクセスするためのより良い方法はありますか?他の誰かがこれをどのように試みますか?私の限られた経験はC#とSQLサーバーであり、いくつかの簡単な構成でいくつかの素晴らしいことを行うことができます...すぐにリストを返します^

よくわからない場合は、すぐに確認してさらにコメントします。私はまだ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後継となる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
于 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 に答える