0

在将 SQL 用于准备好的语句的数据访问对象中,我有几个字符串,其中初始化了 SQL 和绑定变量。其中之一是

private $insertQuestionSql = "
INSERT IGNORE INTO bgt.question_models (nodeId, questionId, parentId, state, version,
questionText, userResponseText) 
VALUES (NID, QID, PID, ST, V, QT, URT)";

该语句与 DAO 函数在同一个类中声明和使用

public function createQuestion(QuestionTemplateModel $qt) {
  //create database connection and initialize transaction
  $connection = Yii::app()->db;
  $transaction = $connection->beginTransaction();

  try {
    $command = $connection->createCommand($this->insertQuestionSql);

在 Yii 中,$connection是一个实例,并通过函数CDbConnection返回一个实例。CDbCommandcreateCommand

由于我在类中访问这个属性,我应该能够访问字符串变量。为什么这里没有发生?

完整的错误是

"Unknown property 'insertQuestionSql' for class 'QuestionDAOTest'."

无论发生这种行为

  • 更改 SQL 字符串
  • 删除第一个换行符

此外,删除$this->结果会导致undefined variable: insertQuestionSql错误。尽管将访问修饰符更改为publicandprotected

4

1 回答 1

0

我不知道这是否对任何人都有帮助,但我想出了一个解决方案。

首先,CDbCommand::bindParam遵循标准的 PHPPDOStatement::bindParam()语法,其中要绑定变量的占位符必须具有前缀:。如果没有该前缀,变量就不会绑定到 SQL 语句。

其次,由于某种原因,private $insertQuestionSql在类中访问时总是发现它是一个未知属性,尽管$this->在调用变量时使用了前缀。我通过将属性转换为static并通过调用来解决此问题

$command = $connection->createConnection(QuestionDAO::$insertQuestionSql);
于 2013-06-06T18:31:07.563 回答