2016-06-30 12 views
-1

私は2つのテーブル、学生とクラスを作成します。私はスタッドIDをクラステーブルの外部キーとして使用しました。 スタッドIDを使用して両方のテーブル値を取得する方法は?また、私はセッションでstud_idを使用しています....セッションIDを使用して2つ以上のテーブルをPHP mysqlでフォームを取得する方法

{<?php 

$id=$_SESSION["Stud_id"]; 

$query = mysql_query ("SELECT * FROM student where Stud_id='$id'"); 

if (!$query) 
{ 
die('Invalid query: ' . mysql_error()); 
} 
while($row = mysql_fetch_assoc($query)) { 

    echo "<tr><td> Student ID:</td><td> " . $row["Stud_id"]. "</td></tr>"; 
    echo "<tr><td> Student Name:</td><td> " . $row["Stud_name"]. "</td> </tr>"; 
    echo "<tr><td> Password:</td><td> " . $row["password"]. "</td></tr>"; 

    echo "<tr><td> Father:</td><td> " . $row["Stud_father"]. "</td></tr>"; 
    echo "<tr><td> Date Of Birth:</td><td> " . $row["Stud_dob"]. "</td>  </tr>"; 
    echo "<tr><td> Address:</td><td> " . $row["Stud_address"]. "</td></tr>"; 
    echo "<tr><td> Gender:</td><td> " . $row["Stud_gender"]. "</td></tr>"; 
    echo "<tr><td> Phone No:</td><td> " . $row["Stud_phone"]. "</td></tr>"; 
    echo "<tr><td> Class</td><td> " . $row["Stud_class"]. "</td></tr>"; 


}?> 
+1

http://dev.mysql.com/doc/refman/5.7/en/join.html –

+0

[SQLクエリが複数のテーブルからデータを返す方法]の可能な複製(http://stackoverflow.com/questions)/12475850/how-can-an-sql-query-from-multiple-tables) – showdev

+0

**警告**:PHPを学んでいるだけの方は、[mysql_query']( http://php.net/manual/en/function.mysql-query.php)インターフェイス。それはPHP 7で削除されたのでとてもひどいと危険です。[PDOのようなものは学ぶのが難しくない](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps -pdo-for-database-access /)と[PHP The Right Way](http://www.phptherightway.com/)のようなガイドがベストプラクティスを説明しています。あなたのユーザーパラメータは**適切にエスケープされていません**(http://bobby-tables.com/php)、悪用可能な[SQLインジェクションバグ](http://bobby-tables.com/)があります。 – tadman

答えて

1

あなたは

上記の列名を変更する必要があり結果

{<?php 

$id=$_SESSION["Stud_id"]; 

$query = mysql_query ("select s.*,c.* from student s join class c on s.Stud_id=c.Stud_id where s.Stud_id = '$id'"); 

if (!$query) 
{ 
die('Invalid query: ' . mysql_error()); 
} 
while($row = mysql_fetch_assoc($query)) { 

    echo "<tr><td> Student ID:</td><td> " . $row["s.Stud_id"]. "</td></tr>"; 
    echo "<tr><td> Student Name:</td><td> " . $row["s.Stud_name"]. "</td> </tr>"; 
    echo "<tr><td> Password:</td><td> " . $row["s.password"]. "</td></tr>"; 

    echo "<tr><td> Father:</td><td> " . $row["s.Stud_father"]. "</td></tr>"; 
    echo "<tr><td> Date Of Birth:</td><td> " . $row["s.Stud_dob"]. "</td>  </tr>"; 
    echo "<tr><td> Address:</td><td> " . $row["s.Stud_address"]. "</td></tr>"; 
    echo "<tr><td> Gender:</td><td> " . $row["s.Stud_gender"]. "</td></tr>"; 
    echo "<tr><td> Phone No:</td><td> " . $row["s.Stud_phone"]. "</td></tr>"; 
    echo "<tr><td> Class</td><td> " . $row["s.Stud_class"]. "</td></tr>"; 


}?> 

編集 を取得するには、以下のクエリを使用することができます

+0

これは効果的にクロス結合を実行しますが、これは望ましいとは思われません。あなたのクエリは 'ON'ステートメントを使うことができると思います。 「[ON条件なしでmysql JOINを使用できますか?](http://stackoverflow.com/questions/16470942/can-i-use-mysql-join-without-on-condition)を参照してください。 – showdev

+0

@showdevありがとう。 :)それを追加するのを忘れました –

3

テーブルを結合します。だからではなく、このような構造の:

SELECT * 
FROM student 
WHERE ... 

あなたはこのような構造を持っていると思います:

SELECT * 
FROM student 
INNER JOIN class ON student.stud_id = class.stud_id 
WHERE ... 

これは、両方のすべての列で、あなたの両方のテーブルの積を与えるだろう。

回答にSQL injectionの脆弱性が含まれないように、私は明示的にWHERE節を除外しました。あなたは間違いなくmysqliPDOprepared statements with query parametersのそれらの使用を見たいと思うでしょう。 (それは聞こえるよりも簡単です)現在、あなたのコードはインターネット上で最も一般的な脆弱性に対して公開されています。

関連する問題