繁体   English   中英

在PHP中打印有点复杂的MYSQL查询表

[英]Printing a table somewhat complex MYSQL query in PHP

我有一个包含2个表User,Contact_List的数据库。

例如,用户表如下所示:

  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的完整菜鸟,将不胜感激任何帮助或建议。

尝试在$ 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

也许只是我失眠了,但是应该可以

您想要检索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();

在您的查询中:

  1. 您指定表别名的语法错误。 不需要=符号。
  2. 您同时将user别名为ucu ,但似乎只需要一个即可。

请尝试以下操作:

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())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM