PHP PDO而不是';我无法达到我的愿望和最终结果

PHP PDO而不是';我无法达到我的愿望和最终结果,php,mysql,pdo,Php,Mysql,Pdo,这是我第一次发布,所以,如果我打开了一个现有的问题,我道歉。因为我在谷歌上找不到结果。很抱歉,我对PHP PDO和学习阶段还不熟悉 回到我的问题,目前我正在从我妻子那里建立一个客户访问日志,但我对结果感到困惑。我有两个表,一个存储客户信息,另一个存储访问详细信息。我在这里上传了测试表: 下面是我当前的编码,我正在使用PHP PDOwhile <?php require_once 'dbconnect.php'; $p_id = $_GET['name']; try { $conn =

这是我第一次发布,所以,如果我打开了一个现有的问题,我道歉。因为我在谷歌上找不到结果。很抱歉,我对PHP PDO和学习阶段还不熟悉

回到我的问题,目前我正在从我妻子那里建立一个客户访问日志,但我对结果感到困惑。我有两个表,一个存储客户信息,另一个存储访问详细信息。我在这里上传了测试表:

下面是我当前的编码,我正在使用PHP PDOwhile

<?php

require_once 'dbconnect.php';

$p_id = $_GET['name'];

try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

$sql = "SELECT customer.fname, customer.lname, customer.gender, services.treatment, services.date
          FROM customer LEFT JOIN services
          ON customer.id = services.customer_id
          WHERE customer.slug  LIKE :id";

$q = $conn->prepare($sql);
$q->execute(array('id' => $p_id));
$q->setFetchMode(PDO::FETCH_ASSOC);

} catch (PDOException $pe) {
die("Could not connect to the database $dbname :" . $pe->getMessage());
}

 ?>
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div id="container">
<h1>Customer Record</h1>
Name: <br />
Gender: <br />    
<table class="table table-bordered table-condensed">
    <thead>
        <tr>
            <th>Customer Name</th>
            <th>Customer Gender</th>
            <th>Treatment</th>
            <th>Date</th>
        </tr>
    </thead>
    <tbody>
        <?php while ($r = $q->fetch()): ?>
        <tr>
            <td><?php echo htmlspecialchars($r['fname']), ' ', htmlspecialchars($r['lname'])?></td>
            <td><?php echo htmlspecialchars($r['gender']); ?></td>
            <td><?php echo htmlspecialchars($r['treatment']); ?></td>
            <td><?php echo htmlspecialchars($r['date']); ?></td>
        </tr>
        <?php endwhile; ?>
    </tbody>
</table>
    <a href="search.html">Seach Again</a>
</body>
</div>
</html>

试验
客户记录
名称:
性别:
客户名称 顾客性别 治疗 日期
我实现了SQL FIDLE的结果,但我想要的是,名字和性别不再重复

我附上了截图:

我想要的是根据屏幕截图,姓名:约翰·多伊和性别:男性,应该在顶部,不要重复,而下表显示了所有的访问细节。我试图修改代码,但似乎没有真正起作用

请告诉我,因为我真的不知道如何实现我想要的


非常感谢。

由于您在SQL查询中执行了
左连接
,因此您提前知道
$q->fetch()
返回的所有
fname
lname
gender
值都将用于相同的
客户。slug
,对吗?所以你可以相信这一点

我的建议是使用函数获取
customer.slug
的所有记录的数组,然后在视图中呈现该数组。例如(尚未测试),您可以在
$q->setFetchMode(PDO::FETCH_ASSOC)之后添加以下内容

$cs = $q->fetchAll();   // customer services join
然后,在
视图中,可以执行以下操作:

<h1>Customer Record</h1>
Name: <?php echo htmlspecialchars($cs[0]['fname'].' '.$cs[0]['lname']); ?> <br />
Gender: <?php echo htmlspecialchars($cs[0]['gender']); ?> <br />

<table>
  <thead>
    <tr>
      <th>Treatment</th>
      <th>Date</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach($cs as $r): ?>
    <tr>
        <td><?php echo htmlspecialchars($r['treatment']); ?></td>
        <td><?php echo htmlspecialchars($r['date']); ?></td>
    </tr>
    <?php endforeach; ?>
</tbody>
客户记录
名称:
性别:
治疗 日期
当然,最好检查查询是否返回了任何记录,如果没有,则显示一条“未找到”消息。毕竟,
$cs[0]
可能是空的,这会给您一个PHP错误