首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii SQLSTATE[HY093]:参数编号无效:未定义参数

Yii SQLSTATE[HY093]:参数编号无效:未定义参数
EN

Stack Overflow用户
提问于 2013-04-20 00:16:28
回答 2查看 4.4K关注 0票数 1

我已经查看了关于此错误消息的其他问题,但所有问题似乎都与参数与其绑定之间的不匹配,或缺少绑定,或类似的东西有关。这是我的代码。这里的任何人都能看到这个错误吗?这是在一个CDbMigration类中。

代码语言:javascript
复制
$this->insert('company', array(
    'name' => 'Site Administrator',
    ));
$companyId = $this->dbConnection->getLastInsertID();

$sql  = 'insert into `user` (`company-id`, `login-id`, `password`) ';
$sql .= 'values (:company-id, :login-id, :password)';
$command = $this->dbConnection->createCommand($sql);
$command->bindValue(':company-id', $companyId, PDO::PARAM_INT);
$command->bindValue(':login-id', 'admin');
$command->bindValue(':password', 'admin');
$command->execute();

第一次插入可以正常执行,第二次插入时会出现以下错误:

代码语言:javascript
复制
Exception: CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined. The SQL statement executed was: insert into `user` (`company-id`, `login-id`, `password`) values (:company-id, :login-id, :password). Bound with :company-id='6', :login-id='admin', :password='admin' (C:\eclipse-php-3.0.2\workspace\interview\lib\yii\db\CDbCommand.php:357)

根据记录,我意识到我需要对密码做一些修改,这样它就不会以纯文本形式存储。我稍后会处理这件事。此外,用户表在迁移类中的定义如下:

代码语言:javascript
复制
$this->createTable('user', array(
    'id' => 'pk',
    'company-id' => 'integer not null',
    'login-id' => 'string unique not null',
    'password' => 'string not null',
    'full-name' => 'string',
    'mobile-phone' => 'string',
    'other-phone' => 'string',
    'email' => 'string unique',
    ));
$this->addForeignKey('fk_user_company', 'user', 'company-id', 'company', 'id'
    , 'restrict');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-20 00:26:06

为什么不以同样的方式继续下去,并拥有:

代码语言:javascript
复制
$this->insert('user', array(
   'company-id' => (int)$companyId,
   'login-id' => 'admin',
   'password' => 'admin'
));

此外,使用短划线而不是下划线也不是表列名称的最佳选择。稍后,您将希望使用CActiveRecord引用登录id,但是

代码语言:javascript
复制
$model->login-id;

是无效的,所以你必须

代码语言:javascript
复制
$model->{'login-id'} // or
$model->getAttribute('login-id');

这是一种痛苦。总体而言,我建议您将其转换为下划线。

票数 3
EN

Stack Overflow用户

发布于 2013-04-20 00:32:15

根据Yii文档:

参数的

SQL数据类型。如果为null,则类型由值的PHP类型确定。

所以:

代码语言:javascript
复制
$command->bindValue(':company-id', $companyId);

代码语言:javascript
复制
$command->bindValue(':company-id', (int)$companyId);

应该行得通

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16109076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档