我有一个数据库,其中有两个表User,Contact_List。
例如,User表如下所示:
U_id | U_email | U_password | U_mobileNo | U_name |
---------------------------------------------------
1 | a@b.c | aaa | 1234567 | Adam |
2 | b@b.c | bbb | 1234567 | Ben |
3 | c@b.c | ccc | 1234567 | Carl |
Contact_list表如下所示。该表仅由外键组成,这些外键将两个用户关联在一起
U_id | U_contact_id
-------------------
1 | 2
2 | 3
现在的问题是我的SQL/PHP查询显示一个由特定用户联系人列表组成的表。
这个SQL查询运行良好,并给出了我想要的结果:
"SELECT cu.u_name, cu.u_email
FROM contact_list = c, user = u, user = cu
WHERE c.u_id = 2
AND c.u_contactId = c.u_id
AND c.u_id = u.u_id"
但是这个PHP代码:
$con = mysqli_connect("dbname","dbuser","pbpass","db");
//Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT cu.u_name, cu.u_email
FROM contact_list = c, user = u, user = cu
WHERE c.u_id = 2
AND c.u_contactId = c.u_id
AND c.u_id = u.u_id" ) or die(mysql_error());
echo "<table border='1'>
<th>Contact List</th>
<tr>
<th>Name</th>
<th>E-mail</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['u_name'] . "</td>";
echo "<td>" . $row['u_email'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_free_result($result);
mysqli_close($con);
?>
该代码只是在页面上打印一个空白表格。
我在这里做错了什么?
我是一个完全不会使用PHP的人,任何帮助或建议都将不胜感激。
您想要检索id为2的用户的所有联系人,因此基本上您的查询如下所示:
SELECT u.u_name, u.u_email
FROM contact_list cl
JOIN user u
ON cl.u_contact_id = u.u_id
WHERE cl.u_id = 2
现场演示
上述查询所做的是,它将根据u_contact_id
加入用户信息,并列出所有注册到它的姓名和电子邮件。
你的PHP会是这样的:
<?php
// your database info here
$db_host = '';
$db_user = '';
$db_pass = '';
$db_name = '';
$con = mysqli_connect($db_host,$db_user,$db_pass,$db_name);
if($con->connect_error)
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
if (!$stmt = $con->prepare("SELECT u.u_name, u.u_email
FROM contact_list cl
JOIN user u
ON cl.u_contact_id = u.u_id
WHERE cl.u_id = ?"))
die('Prepare Error: ' . $con->error);
$id = 2;
if (!$stmt->bind_param('i', $id))
die('Bind Parameters Error ' . $stmt->error);
if (!$stmt->execute())
die('Select Query Error ' . $stmt->error);
?>
<table border="1">
<th>Contact List</th>
<tr>
<th>Name</th>
<th>E-mail</th>
</tr>
<?php
$stmt->bind_result($name,$email);
while ($stmt->fetch())
{
?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $email; ?></td>
</tr>
<?php
}
echo "</table>";
$stmt->close();
$con->close();
尝试在$row上执行var_dump,您可能会发现更多错误,如果没有出现var_dump,也没有返回结果,请使用mysqli_error查找的错误
mysqli_error($con);
while($row = mysqli_fetch_array($result))
{
var_dump($row);
}
这可能是的一个案例问题
$row['u_name']
可能是
$row['U_name']
SELECT cu.u_name, cu.u_email
FROM contact_list c, user u, user cu
WHERE c.u_id = 2
AND c.u_contactId = c.u_id
AND c.u_id = u.u_id
也许只是我失眠了,但这应该有效
在您的查询中:
- 指定表别名的语法错误。不需要
=
符号 - 您将
user
别名为u
和cu
,但似乎只需一个就可以了
尝试以下操作:
SELECT cu.u_name, cu.u_email
FROM contact_list c, user u // Or alternatively: FROM contact_list AS c, user AS u
WHERE c.u_id = 2
AND c.u_contactId = c.u_id
AND c.u_id = u.u_id
顺便说一句,在打印<table>
时,需要将<th>
放置在<tr>
中以获得有效的HTML。
此外,在你的$result = mysql_query (....)
中,你以or die (mysql_error())
结束了它。应该是or die (mysqli_error())
。