2014-03-12 31 views
1

我試圖在PHP中加入一個表格,所以我可以從度表中顯示學位名稱。加入PHP中的MySQL表格

下面是代碼,它在我在MySQL中查詢時起作用。但是,當信息被拉入html表格中時,它顯示了名字和姓氏,但主要名稱會有空白。

學生表

學生信息...

度(INT)

度表

PKID(INT)

degreeName(VARCHAR2)

$pkID = $_GET['id']; 
echo "Student ID: " . $pkID; 

//create the connection 
$mysql_host = 'localhost'; 
$mysql_user = 'root'; 
$mysql_password = '********'; 
$mysql_db = 'database'; 

//create conection 
$con = mysqli_connect($mysql_host, $mysql_user, $mysql_password, $mysql_db); 

//check connection 
if(mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$result = mysqli_query($con, "SELECT s.fname,s.lname, d.degreeName FROM students s,  degree d WHERE s.degree = d.pkID AND s.id = " . $pkID); 

echo "<table border='1'> 
<tr> 
<th>F Name</th> 
<th>L Name</th> 
<th>Major</th> 
</tr>"; 

while ($row=mysqli_fetch_array($result)) 
{ 
    echo "<tr>"; 
    echo "<td>" . $row['fname'] . "</td>"; 
    echo "<td>" . $row['lname'] . "</td>"; 
    echo "<td>" . $row['degreeName'] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 
+0

你在某個地方使用'mysqli_fetch_ *'嗎?您可以添加用於顯示數據的HTML代碼嗎? – Bram

+1

這聽起來像是一項家庭作業。如果是這樣,請詢問你的老師爲什麼你正在學習這種老派,難以閱讀和不靈活的加入方式。 – GolezTrol

+0

另外 - 使用參數化語句來做到這一點: http://www.terjemar.net/php/2011/09/using-mysqli-and-parameterized-statements/ – Matthew

回答

0

讓您的JOIN 明確

SELECT s.fname, s.lname, d.degreeName 
FROM students s INNER JOIN degree d 
    ON s.degree = d.id 
WHERE s.id = $pkID 

的MySQL 可以做一些內部fudgery得到什麼認爲你想,但它贏得不會總是按照您的期望工作,或者根本就是按照您的期望工作。

在原始查詢SQL會嘗試做一個完整的CROSS JOIN,又名在students重視每一行每一行中degree,然後篩選根據您WHERE條件。當你在每個表中有10行時,你可能不會注意到這是壞的,使得臨時表只有100行。但如果每個都有1000行,並且CROSS JOIN臨時表涉及1,000,000行。

此外,你應該真的研究參數化您的查詢,或至少消毒您的輸入。在你的查詢中連接像$pkID這樣的變量是SQL注入發生的方式。

+0

http://en.wikipedia.org/wiki/SQL_injection –

0

試試這個

$result = mysqli_query($con, "SELECT s.fname,s.lname, d.degreeName FROM students s inner join degree d on s.degree = d.pkID WHERE s.id = " . $pkID); 
+0

這在表格中沒有提供結果。 – WingNut86