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

PHP中实现条件查询结果表格展示的技术问题咨询

修复你的PHP条件查询与结果表格展示问题

嘿,我帮你梳理下这段代码里的几个关键问题,然后给出能正常运行且更安全的修复版本:

原代码里的坑点

  • 过时的数据库函数:你用的mysql_*系列函数早在PHP 5.5就被废弃了,PHP 7及以后直接移除了这些函数,必须换成mysqli或者PDO才能正常运行
  • SQL语法错误:
    • WHERE子句里的'ORDER-NO'用了单引号,这会被SQL当成普通字符串,而不是字段名,得换成反引号`
    • 查询语句最后少了一个闭合的单引号,直接导致SQL执行失败
  • 严重的安全隐患:直接把$_POST['Onum']拼进SQL语句,恶意用户很容易通过构造输入篡改你的查询逻辑(也就是SQL注入)
  • 错误提示毫无意义:die("ok")这种提示完全帮不了你排查问题,得显示实际的错误信息
  • 不规范的写法:$_POST{'Onum'}虽然语法上能跑,但大家一般都用$_POST['Onum'],更易读

修复后的完整代码(用mysqli面向对象写法,更易维护)

<?php
// 先判断是否有POST过来的订单编号
if (isset($_POST['Onum'])) {
    $Onum = $_POST['Onum'];
    
    // 连接数据库,直接指定数据库名更简洁
    $connect = new mysqli("localhost", "root", "", "dbmsproj");
    
    // 检查连接是否成功
    if ($connect->connect_error) {
        die("数据库连接失败: " . $connect->connect_error);
    }
    
    // 用预处理语句防SQL注入,这是现在的标准做法
    $query = "SELECT `ITEM-NO` FROM `made-of` WHERE `ORDER-NO` = ?";
    $stmt = $connect->prepare($query);
    // 绑定参数,"s"表示字符串类型,如果你的ORDER-NO是整数就换成"i"
    $stmt->bind_param("s", $Onum);
    $stmt->execute();
    $results = $stmt->get_result();
    
    // 输出表格,加个border让结构更清晰,再加个表头
    echo "<table border='1'>";
    echo "<tr><th>ITEM-NO</th></tr>";
    while ($row = $results->fetch_assoc()) {
        // 用htmlspecialchars转义输出,防止XSS攻击
        echo "<tr><td>" . htmlspecialchars($row['ITEM-NO']) . "</td></tr>";
    }
    echo "</table>";
    
    // 记得关闭资源,养成好习惯
    $stmt->close();
    $connect->close();
} else {
    echo "请提交有效的订单编号哦";
}
?>

额外提醒

  • 因为你的字段名带连字符(比如ITEM-NO),所以必须用反引号包裹,不然SQL会把连字符当成减号解析,直接报错
  • 预处理语句一定要用,别再直接拼字符串了,安全第一
  • 输出数据库内容时用htmlspecialchars,能避免恶意脚本注入到页面里

如果运行后还是有问题,可以检查这几点:

  • 数据库的用户名、密码、数据库名是不是和你的实际环境匹配
  • made-of表确实存在,ORDER-NO和ITEM-NO的拼写有没有错
  • 提交数据的表单是不是用的POST方法,表单输入框的name属性是不是Onum

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:13:25