【问题标题】:PDOStatement::execute Values doesn't work with WHERE Condition & HAVING ConditionPDOStatement::execute 值不适用于 WHERE 条件和 HAVING 条件
【发布时间】:2022-01-05 22:14:46
【问题描述】:

我有一个错误的 PDOStatement::execute Values with WHERE Con​​dition & HAVING Condition in the same requette

我如何在 WHERE、HAVING 两个主题中执行准备值

$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();

错误: 参数号无效:绑定变量数与标记数不匹配

【问题讨论】:

  • 请始终显示完整的错误信息,同时使用where和have没问题
  • Erreur : 无效的参数号:绑定变量的数量与标记的数量不匹配
  • 只需简单地将命名占位符放在语句上,不需要引号。然后将通配符放在有效负载上(连接)

标签: php mysql pdo having


【解决方案1】:

你的 mysql 代码首先会运行有问题,所以你总是应该测试你的查询

WHERE _x_md_currencies_x_md_tasks.ID_md_currencies = _md_currencies.ID),"") sho9uld 该行看起来像,因为列和表名用点分隔,ifnull 还需要一个参数,所以你需要先关闭一个括号

php部分的错误,首先是你使用单引号alreadx来确定字符串,所以在字符串内部使用它们是有问题的,因为你真的不需要它。

正如您在$ValueRequette=看到的那样,您必须使用带双点的palcehoders 名称

$MyRequetteRecords = '
     
        SELECT `_md_currencies`.`_fd_currency`,
                        IFNULL(
                                (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'+'%'  
]

【讨论】:

  • 我的 sql 在没有 PDOStatement::execute 的情况下使用手动值,也可以使用 WHERE 和 PDOStatement::execute 但是当我将 PDOStatement::execute 放在 HAVING 和 WHERE (ERROR) 中时
  • 哪个错误?您是否也可以在此处发布带有数据的 CREate 表 phpize.online
猜你喜欢
  • 2015-02-19
  • 2015-09-26
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多