教义错误“无效的参数号:绑定变量的数量与标记的数量不匹配”

Posted

技术标签:

【中文标题】教义错误“无效的参数号:绑定变量的数量与标记的数量不匹配”【英文标题】:Doctrine error "Invalid parameter number: number of bound variables does not match number of tokens" 【发布时间】:2013-06-08 14:35:55 【问题描述】:

我正在构建一个 Symfony 1.4.20 应用程序并编写了以下代码:

public function getListForAdmin() 
    $user = sfContext::getInstance()->getUser();
    $q = $this->createQuery('g');

    if ($user->hasCredential('can_admin_full')) 
        $q->addWhere('g.name IN (?)', array('Administradores Monitor', 'Monitor'));
     else if ($user->hasCredential('can_admin')) 
        $q->addWhere('g.name IN (?)', array('Monitor'));
    

    return $q;

在 Symfony 日志中查看结果查询如下:

SELECT s.id AS s__id, s.name AS s__name, s.description AS s__description, s.created_at AS s__created_at, s.updated_at AS s__updated_at 
      FROM sf_guard_group s 
      WHERE (s.name IN ('Administradores Monitor'))

我在 phpMyAdmin 中运行查询,一切都很好,这意味着查询没有任何问题,但在 Symfony with Doctrine 中我收到此错误:

SQLSTATE[HY093]:无效的参数号:绑定变量的数量 令牌数不匹配

为什么?怎么了?

【问题讨论】:

【参考方案1】:

我认为这行有问题:

 $q->addWhere('g.name IN (?)', array('Administradores Monitor', 'Monitor'));

 $q->addWhere('g.name IN (?)', array('Monitor'));

应该是:

$q->whereIn('g.name', array('Administradores Monitor', 'Monitor'));

$q->whereIn('g.name', array('Monitor'));

更新:修改答案

【讨论】:

@denys821 我将代码更改为您的建议,但收到此错误Fatal error: Call to undefined method Doctrine_Query::addWhereIn() in /var/www/html/monitor/lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardGroupTable.class.php on line 28 @deny821 经过一番研究,我找到了解决方案或想到了,别担心。 addWhereIn 在 Doctrine 中不存在(请参阅 here),而是我使用 whereIn 然后代码工作,无论如何谢谢,我会给你点帮助我并指出我正确的方向跨度> @Reynier 对不起,我不专心,我用记忆写了答案:(

以上是关于教义错误“无效的参数号:绑定变量的数量与标记的数量不匹配”的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 教义关联映射错误处理

Codeigniter - 教义插入错误 - 多对一关系

教义错误:“打开失败需要'/tmp/__CG__Source.php'”

Doctrine2 Merge() 因复合索引而失败教义2错误?

XML 中的教义类继承

检查教义关系是不是正确