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

PDOStatement::execute同时为WHERE和HAVING绑参报错如何解决

错误原因
  • 命名占位符被包裹在单引号内:PDO不会解析单引号中的:value0、:value1占位符,会将其识别为普通字符串,导致SQL中实际可绑定的参数令牌数量为0,和传入的2个参数数量不匹配,触发报错。
  • LIKE通配符位置错误:%需要和参数值拼接后再传入绑定,不能直接写在SQL语句的占位符两侧。
修正后代码
$MyRequetteRecords = "
SELECT 
    _md_currencies._fd_currency,
    (
        SELECT GROUP_CONCAT( _md_tasks_level1._fd_name SEPARATOR ' + ') FROM _x_md_currencies_x_md_tasks
                
        LEFT JOIN 
            _md_tasks AS _md_tasks_level1 ON
            _x_md_currencies_x_md_tasks.ID_md_tasks = _md_tasks_level1.ID  
        
            WHERE _x_md_currencies_x_md_tasks.ID_md_currencies = _md_currencies.ID
    ) AS Many2Many_Currency

From 
    _md_currencies 
WHERE 
    _md_currencies._fd_currency  LIKE :value0
HAVING 
    Many2Many_Currency LIKE :value1
";


$ValueRequette=[
  'value0' => '%Currency 1%',
  'value1' => '%Task%' 
];


$statement = $bdd_dataManger->prepare($MyRequetteRecords); 
$statement->execute($ValueRequette);

$Record = $statement->fetchAll(\PDO::FETCH_ASSOC);
$statement->closeCursor();
补充说明

PDO预处理参数的绑定规则对WHERE条件和HAVING条件完全一致,没有特殊差异,只要保证占位符不被引号包裹、参数数量和占位符数量一一对应,即可正常完成绑定。

内容的提问来源于stack exchange,提问作者Rezigdev.com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:15:03