You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP从SQL数据库多行显示指定数据及洗衣工单显示问题求助

问题1:如何在PHP中从SQL数据库显示多行指定数据

嘿,我来帮你搞定这个问题!要在PHP里从SQL数据库取出并显示多行指定数据,步骤其实很清晰,我给你拆解成两种常用的实现方式,你可以根据自己的习惯选:

方式一:用PDO(推荐,更安全且兼容多数据库)

PDO是PHP的数据对象扩展,自带参数绑定能有效避免SQL注入,是现在的最佳实践:

// 1. 建立数据库连接
$dsn = 'mysql:host=localhost;dbname=你的数据库名;charset=utf8mb4';
$username = '数据库用户名';
$password = '数据库密码';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("连接失败: " . $e->getMessage());
}

// 2. 执行指定条件的查询(这里示例是获取状态为"待处理"的工单,你可以改WHERE条件)
$stmt = $pdo->prepare("SELECT ticket_id, customer_name, service_type FROM TICKET WHERE status = ?");
$stmt->execute(['待处理']);

// 3. 遍历结果并渲染成表格
echo "<table border='1'>";
echo "<tr><th>工单ID</th><th>客户姓名</th><th>服务类型</th></tr>";
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    // 用htmlspecialchars转义输出,防止XSS攻击
    echo "<tr>";
    echo "<td>" . htmlspecialchars($row['ticket_id']) . "</td>";
    echo "<td>" . htmlspecialchars($row['customer_name']) . "</td>";
    echo "<td>" . htmlspecialchars($row['service_type']) . "</td>";
    echo "</tr>";
}
echo "</table>";

方式二:用mysqli(面向过程风格,适合习惯原生写法的开发者)

如果你更熟悉mysqli的面向过程写法,也可以这么做:

// 1. 建立连接
$conn = mysqli_connect('localhost', '用户名', '密码', '数据库名');
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
mysqli_set_charset($conn, 'utf8mb4');

// 2. 执行查询
$sql = "SELECT ticket_id, customer_name, service_type FROM TICKET WHERE status = '待处理'";
$result = mysqli_query($conn, $sql);

// 3. 显示数据
if (mysqli_num_rows($result) > 0) {
    echo "<table border='1'>";
    echo "<tr><th>工单ID</th><th>客户姓名</th><th>服务类型</th></tr>";
    while ($row = mysqli_fetch_assoc($result)) {
        echo "<tr>";
        echo "<td>" . htmlspecialchars($row['ticket_id']) . "</td>";
        echo "<td>" . htmlspecialchars($row['customer_name']) . "</td>";
        echo "<td>" . htmlspecialchars($row['service_type']) . "</td>";
        echo "</tr>";
    }
    echo "</table>";
} else {
    echo "没有找到匹配的数据";
}

// 记得关闭连接
mysqli_close($conn);

问题2:同一用户添加多个工单后,ticket_id同时展示的问题

作为PHP新手遇到这个太正常啦!核心问题应该是你查询ticket_id的时候,没加精准的过滤条件,导致把该用户的所有工单ID都查出来了。我分两种常见场景给你解决办法:

场景1:添加工单后跳转到详情页,却显示所有工单ID

这种情况是你没把刚生成的工单ID传递到详情页,或者查询时没指定该ID。解决步骤:

  1. 提交工单成功后,获取刚插入的ticket_id:
    // PDO写法
    $stmt = $pdo->prepare("INSERT INTO TICKET (user_id, service_type, create_time) VALUES (?, ?, NOW())");
    $stmt->execute([$_SESSION['user_id'], '普通洗衣']);
    $new_ticket_id = $pdo->lastInsertId(); // 获取最新生成的工单ID
    header("Location: ticket_detail.php?id=" . $new_ticket_id);
    exit;
    
    // mysqli写法
    mysqli_query($conn, "INSERT INTO TICKET (user_id, service_type, create_time) VALUES ('{$_SESSION['user_id']}', '普通洗衣', NOW())");
    $new_ticket_id = mysqli_insert_id($conn);
    header("Location: ticket_detail.php?id=" . $new_ticket_id);
    exit;
    
  2. 在详情页ticket_detail.php中,根据传递的ID查询唯一工单:
    // 先验证参数合法性
    if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
        die("非法请求");
    }
    $ticket_id = intval($_GET['id']);
    
    // PDO查询(加user_id过滤防止越权)
    $stmt = $pdo->prepare("SELECT ticket_id, service_type, status FROM TICKET WHERE ticket_id = ? AND user_id = ?");
    $stmt->execute([$ticket_id, $_SESSION['user_id']]);
    $ticket = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($ticket) {
        echo "你的工单ID是:" . htmlspecialchars($ticket['ticket_id']);
        // 这里可以继续显示工单其他信息
    } else {
        echo "找不到该工单,或者你没有权限查看";
    }
    

场景2:订单列表页每个条目都显示所有ticket_id

这是循环遍历结果集时的逻辑错误,比如你把所有ID拼接在一起了。正确的做法是每个订单条目只显示对应ID:

// 查询当前用户的所有工单
$stmt = $pdo->prepare("SELECT ticket_id, service_type, create_time, status FROM TICKET WHERE user_id = ? ORDER BY create_time DESC");
$stmt->execute([$_SESSION['user_id']]);

echo "<h3>你的所有工单</h3>";
echo "<ul>";
while ($ticket = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "<li>";
    echo "工单ID:" . htmlspecialchars($ticket['ticket_id']) . " | ";
    echo "服务类型:" . htmlspecialchars($ticket['service_type']) . " | ";
    echo "状态:" . htmlspecialchars($ticket['status']);
    echo "</li>";
}
echo "</ul>";

快速排查技巧:

  • 把你的SQL查询语句打印出来看看,比如echo $sql;,确认有没有加正确的WHERE条件。
  • 检查SESSION里的user_id是否正确,确保你是用当前登录用户的ID过滤工单的。

内容的提问来源于stack exchange,提问作者Ahmad Afham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:27:54