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

PHP过程式代码中LIKE关键字的SQL语法错误排查与修复

错误原因及修复方案

错误核心

你混淆了两种SQL执行逻辑:前面已经用mysqli预处理语句(mysqli_stmt_*系列函数)完成参数绑定与执行,但后续错误调用mysqli_query($conn, $sql)直接执行带?占位符的原始SQL。mysqli_query不支持预处理占位符,数据库会把?当作普通字符解析,从而抛出语法错误。

修复步骤

删除mysqli_query相关错误代码,改用预处理语句的API获取查询结果:

修复后的完整代码:

function getProductsBySearch($conn, $search){    
    $sql = "SELECT * FROM products
        JOIN users  ON products.userid = users.id
        WHERE users.name LIKE ? OR users.surname LIKE ? OR users.class LIKE ? OR users.email LIKE ?";
    $stmt = mysqli_stmt_init($conn);    
    if(!mysqli_stmt_prepare($stmt, $sql)){        
        header("location: ../index.php?error=stmtfailed");        
        exit();    
    }    
    $searchTerm = "%".$search."%";
    mysqli_stmt_bind_param($stmt, "ssss", $searchTerm, $searchTerm, $searchTerm, $searchTerm);
    mysqli_stmt_execute($stmt);
    // 通过预处理语句对象获取结果集
    $result = mysqli_stmt_get_result($stmt);
    $products = mysqli_fetch_all($result, MYSQLI_ASSOC);    
    mysqli_stmt_close($stmt);    
    return $products;
}

关键修改点

  1. 移除冗余的mysqli_stmt_store_result($stmt);(使用mysqli_stmt_get_result时无需此步骤)
  2. 删除错误的$result = mysqli_query($conn, $sql);代码
  3. 替换为$result = mysqli_stmt_get_result($stmt);,通过预处理语句对象获取合法结果集
  4. 变量名改为$searchTerm避免混淆(可选,仅为代码可读性优化)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:17