当前位置: 首页 > 面试题库 >

“无效的参数编号:参数未定义”插入数据

牛嘉谊
2023-03-14
问题内容

更新

列出值时,我犯了一个小错误。我应该输入“:username”而不是“:alias”。我想这个问题的答案是谁想要的自由统治?还是删除问题?

原版的

我一直在使用Yii的活动记录模式。现在,我的项目需要为一个小事务访问另一个数据库。我以为Yii的DAO会很好。但是,我收到了一个神秘的错误。

CDbCommand无法执行SQL语句:SQLSTATE [HY093]:无效的参数编号:参数未定义

这是我的代码:

public function actionConfirmation
{
    $model_person = new TempPerson();

    $model = $model_person->find('alias=:alias',array(':alias'=>$_GET['alias']));
    $connection=Yii::app()->db2;
            $sql = "INSERT INTO users (username, password, ssn, surname
                    , firstname, email, city, country) 
                    VALUES(:alias, :password, :ssn, :surname
                    , :firstname, :email, :city, :country)";
            $command=$connection->createCommand($sql);
            $command->bindValue(":username", $model->alias);
            $command->bindValue(":password", substr($model->ssn, -4,4));
            $command->bindValue(":ssn", $model->ssn);
            $command->bindValue(":surname", $model->lastName);
            $command->bindValue(":firstname", $model->firstName);
            $command->bindValue(":email", $model->email);
            $command->bindValue(":city", $model->placeOfBirth);
            $command->bindValue(":country", $model->placeOfBirth);
            $command->execute();
            $this->render('confirmation',array('model'=>$model));
}

这将构造以下查询(如在应用程序日志中所示):

INSERT INTO users (username, password, ssn, surname, firstname, email
                   , city, country) 
VALUES(:alias, :password, :ssn, :surname, :firstname, :email, :city, :country);

仅供参考$model->placeOfBirth,以市值和县值表示。那不是错别字(我要做的只是愚蠢的事情)。


问题答案:

仅提供一个答案-因为此错误非常普遍-这里有一些原因:

1)该:parameter名称与错误绑定(typo?)不匹配。这就是这里发生的事情。他:alias在SQL语句中,但已绑定:username。因此,当尝试进行参数绑定时,Yii
/ PDO :username在sql语句中找不到,这意味着“参数短”并引发了错误。

2)完全忘记bindValue()为参数添加。这在Yii其他结构(如$critera,具有数组或params($criteria->params = array(':bind1'=>'test', ':bind2'=>'test)))中更容易做到。

3)使用together和时,与CDataProvider分页和/或排序很奇怪joins。没有特定,简单的方法可以对此进行表征,但是当在CDataProviders中使用复杂的查询时,我遇到了奇怪的问题,即删除了参数并发生了此错误。

解决Yii中这些问题的一种非常有用的方法是在配置文件中启用参数记录。将此添加到db配置文件中的数组中:

'enableParamLogging'=>true,

并确保CWebLogRoute在您的log部分中设置了路线。这将打印出给出和错误的查询,以及它试图绑定的所有参数。超级有帮助!



 类似资料:
  • 我已经和这个打了几天了。。。 刚连接到数据库- 叫来- 但我只是 PHP致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:无效参数编号:未定义参数” 在执行行上。 如果它是相关的,表是这样定义的: 我对PDO还比较陌生,尤其是BLOB,所以我可能在做一些很明显很愚蠢的事情,但它现在正在逃避我! 谢谢 编辑:我注意到prepare中对引号:comment的引用

  • 问题内容: 上面的代码因以下错误而失败 SQLSTATE [HY093]:参数号无效:参数未定义 虽然什么时候才执行? 这里发生了什么? 问题答案: 您收到的此错误: SQLSTATE [HY093]:参数号无效:参数未定义 是因为&中的元素数不相同或包含1个以上的元素。 如果包含多个元素,则插入操作将失败,因为query()中仅引用了1个列名 如果&不包含相同数量的元素,则由于查询期望x参数,但

  • 问题内容: 今天,我遇到了一个以前从未见过的错误(在PDO中),但是当您考虑一下时,它是显而易见的。 我收到以下错误: 我使用的查询类似于以下内容: 显然,我有更多的参数和更长的查询。 为什么会给我这个错误? 问题答案: 解决方案是显而易见的:PDO不理会注释,而是尝试绑定不存在的变量’:Z’。您不能在PDO的注释中使用参数(除非您绑定它们)。 在注释中使用问号也存在类似的错误。

  • 问题内容: $ fields是一个数组,打印后得到的值如下: 我从数据类中调用update函数,如下所示: 但是我得到了错误: 警告:PDOStatement :: execute():SQLSTATE [HY093]:无效的参数编号:在…文件文本中未定义参数 我检查了其他几个类似的线程,但我想这里缺少一些基本概念,因为我仍然找不到答案。据我所知,数组中有7个和7个项目,如果我定义了所有值,则可以

  • 问题内容: 尝试运行以下功能时,出现错误“ SQLSTATE [HY093]:无效的参数号”: 我觉得这很简单,我只是没有抓住。有任何想法吗? 问题答案: 尝试: 和 文档摘录(http://php.net/manual/zh/pdo.prepare.php): 调用PDOStatement :: execute()时,对于要传递给语句的每个值,必须包含一个唯一的参数标记。您不能在准备好的语句中两

  • 这是我的php代码 我得到了这个错误 致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[HY093]:参数编号无效:未在C:\xampp\htdocs\miradmin\views\add#news.php:24堆栈跟踪:#0 C:\xampp\htdocs\miradmin\views\add#news.php(24):PDO语句中定义参数- 就可以了。