如何获取数据库搜索行的列值?固定ID查询问题求助
解决根据order_inv搜索获取对应行数据的问题
我来帮你搞定这个问题!你现在的代码之所以不管搜什么都只显示ID=1的行,核心原因是SQL查询完全没用到用户提交的order_inv参数,而是硬写死了查id=1的固定数据。下面是具体的修改方案,还会帮你规避SQL注入的风险:
核心修改步骤
1. 获取用户提交的搜索参数
首先在result.php里,要先拿到用户从搜索表单提交的order_inv值,还要做基本的有效性检查:
// 先开启session(如果要用$_SESSION存储数据,必须放在代码最开头) session_start(); // 检查是否有有效提交的order_inv参数 if (!isset($_POST['order_inv']) || empty(trim($_POST['order_inv']))) { // 如果没有有效参数,跳回搜索页面 header("Location: search.php"); exit; } $order_inv = trim($_POST['order_inv']);
2. 使用预处理语句执行安全查询
绝对不要直接把用户输入拼进SQL语句里,这会导致严重的SQL注入漏洞。我们用MySQLi的预处理语句来安全查询:
// 准备预处理语句,?是参数占位符 $stmt = mysqli_prepare($connz, "SELECT * FROM add_courier WHERE order_inv = ?"); // 绑定参数:"s"表示参数是字符串类型,对应后面的$order_inv mysqli_stmt_bind_param($stmt, "s", $order_inv); // 执行查询 mysqli_stmt_execute($stmt); // 获取查询结果集 $res = mysqli_stmt_get_result($stmt);
3. 处理查询结果并提取字段值
接下来检查是否找到对应记录,然后提取你需要的字段:
if (mysqli_num_rows($res) > 0) { // 因为快递单号(order_inv)应该是唯一的,用fetch_assoc获取单条数据即可 $row = mysqli_fetch_assoc($res); // 提取你需要的字段值 $tracking = $row['tracking']; $s_name = $row['s_name']; $phone = $row['phone']; $address = $row['address']; $_SESSION['id'] = $row['id']; // 这里可以添加代码把数据展示给用户,比如: echo "<h3>Tracking Result</h3>"; echo "<p>Recipient Name: $s_name</p>"; echo "<p>Phone: $phone</p>"; echo "<p>Address: $address</p>"; echo "<p>Tracking Code: $tracking</p>"; } else { // 没有找到对应记录时的提示 echo "<p>Sorry, no tracking record found for the shipping number you entered.</p>"; } // 记得关闭语句和结果集,释放资源 mysqli_stmt_close($stmt); mysqli_free_result($res);
重要注意事项
- 确保你的数据库表
add_courier中确实存在order_inv列,别把列名拼写错了。 - 如果你的
order_inv列是数字类型,绑定参数时把"s"改成"i"即可。 session_start();必须放在result.php的最顶部,任何输出之前,否则$_SESSION无法正常使用。
内容的提问来源于stack exchange,提问作者emeishiwu
相关产品推荐
相关产品推荐

