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

PHP+HTML页面实现MySQL单字段通配符搜索报错排查求助

问题排查与修复方案

错误原因分析

  1. SQL语法错误:生成的SQL语句存在两处多余逗号:
    • DATE_FORMAT(Record started Date, '%d-%m-%Y') AS Record started Date, FROM 中,别名后多了一个逗号
    • FROM Sheep, WHERE 中,表名后多了一个逗号
  2. PDO参数绑定不匹配:代码直接将用户输入拼入SQL字符串,却尝试绑定:sheep参数,但SQL中无该占位符,导致参数数量与标记数不匹配,触发SQLSTATE[HY093]错误。
  3. SQL注入风险:直接拼接用户输入到SQL中,存在严重安全隐患。

修复后的完整PHP代码

<?php

// 开启错误调试,便于排查问题
error_reporting(-1);
ini_set('display_errors', 'On');

if (isset($_POST['submit'])) {
  try {
    require "./config.php";
    require "./common.php";

    $connection = new PDO($dsn, $username, $password, $options);
    $sheep = $_POST['sheep'];
    
    // 使用PDO占位符,避免SQL注入,同时修正SQL语法错误
    $sql = "SELECT *,
DATE_FORMAT(DOB, '%d-%m-%Y') AS DOB,
DATE_FORMAT(`Record started Date`, '%d-%m-%Y') AS `Record started Date`
FROM Sheep
WHERE `Notes` LIKE :sheep";

    $statement = $connection->prepare($sql);
    // 将通配符与用户输入拼接后绑定,实现模糊搜索
    $searchTerm = "%{$sheep}%";
    $statement->bindParam(':sheep', $searchTerm, PDO::PARAM_STR);
    $statement->execute();

    $result = $statement->fetchAll();
  } catch(PDOException $error) {
    echo $sql . "<br>" . $error->getMessage();
  }
}
?>

核心修复说明

  • 修正SQL语法:移除两处多余逗号,确保SQL语句结构合法。
  • 规范PDO参数绑定:用:sheep占位符替代直接变量拼接,将模糊搜索的通配符%与用户输入拼接后再绑定,既解决参数不匹配问题,又彻底规避SQL注入风险。
  • 启用错误调试:解除错误报告注释,方便后续定位其他潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:10:40