代码之家  ›  专栏  ›  技术社区  ›  Omar Al-Ithawi

该方法是否已被弃用?

  •  0
  • Omar Al-Ithawi  · 技术社区  · 16 年前

    我对这个方法有意见 Doctrine_Table::find() ,因为它是一个例外 SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

    我用计算机解决了这个问题 Doctrine::getTable('City')->findOneById($id);

    当我试图深入研究这个问题时,我很惊讶,因为没有关于这个方法的文档 条令表::查找() official website .

    有人知道问题出在哪里吗?它被弃用了吗?

    有关数据库的详细信息:

    CREATE  TABLE IF NOT EXISTS `country` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `name` VARCHAR(64) NOT NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8
    COLLATE = utf8_unicode_ci;
    
    
    CREATE  TABLE IF NOT EXISTS `city` (
      `id` INT NOT NULL AUTO_INCREMENT ,
      `name` VARCHAR(64) NOT NULL ,
      `country_id` INT NOT NULL ,
      PRIMARY KEY (`id`, `country_id`) ,
      INDEX `fk_city_country` (`country_id` ASC) ,
      CONSTRAINT `fk_city_country`
        FOREIGN KEY (`country_id` )
        REFERENCES `country` (`id` )
        ON DELETE CASCADE
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8
    COLLATE = utf8_unicode_ci;
    

    条令表::查找() ,及 Doctrine_Table::findOneById() Country 桌子

    附言: 我意识到 是一个 __call() find() 方法不能按预期运行(我的预期是错误的还是什么)!

    2 回复  |  直到 8 年前
        1
  •  0
  •   Vitor M    16 年前

    哦,糟糕。我没早点看到,真丢脸

    您的表有两个主键(id和country_id),因此find方法要求您将这两个参数传递给find方法。

    您可以使用神奇的方法:

    Doctrine::getTable('City')->findOneById(1)
    
        2
  •  0
  •   Vitor M    16 年前

    从V1.2.1开始,Doctrine_Table::find()是 不 不赞成 http://www.doctrine-project.org/documentation/manual/1_2/en/component-overview#table:finder-methods

    至于“invalid parameter number”错误,这意味着您查询的参数比预期的多或少,最常见的情况是您使用了标记(?),但忘记了向其添加参数

    Doctrine_Query::create()
    ->from('User u')
    ->where('u.name = ?', 'Jonh')
    ->andWhere('u.is_active = ?')
    

    我使用的示例有两个标记“?”,但只有一个参数“jonh”,它会抛出相同的错误:“无效参数编号:绑定变量的数量与标记的数量不匹配”

    推荐文章