我正在尝试使用PHP加入表格,以便我可以从学位表中显示学位名称。
下面是代码,当我在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 :(得分: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);
答案 1 :(得分: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 可以做一些内部的小工具来获得你想要的想法,但它并不总是按照你期望的方式工作,或者有时候工作。
在您的原始查询中,SQL将尝试执行完整CROSS JOIN
,即将students
中的每一行附加到degree
中的每一行,然后根据您的{{进行过滤1}}条件。当你在每个表中有10行时,你可能不会注意到这是不好的,这使得WHERE
临时表只有100行。但如果每行有1000行,CROSS JOIN
临时表将涉及 1,000,000 行。
此外,您应真正查看参数化查询,或者至少清理您的输入。将CROSS JOIN
之类的变量连接到查询中就是SQL注入的发生方式。