在使用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
的实例,并通过CDbCommand
函数返回createCommand
的实例。
由于我在类中访问此属性,因此我应该能够访问字符串变量。为什么这不会发生?
完整错误是
"Unknown property 'insertQuestionSql' for class 'QuestionDAOTest'."
无论
如何,都会发生此行为此外,删除$this->
会导致undefined variable: insertQuestionSql
错误。尽管将访问修饰符更改为public
和protected
答案 0 :(得分:0)
我不知道这对任何人都有帮助,但我找到了解决方案。
首先,CDbCommand::bindParam
遵循标准的PHP PDOStatement::bindParam()
语法,其中要绑定变量的占位符必须具有前缀:
。如果没有该前缀,则变量不会绑定到SQL语句。
其次,出于某种原因,尽管在调用变量时使用了private $insertQuestionSql
前缀,但在访问类时,$this->
总是被发现是一个未知属性。我通过将属性转换为static
并通过
$command = $connection->createConnection(QuestionDAO::$insertQuestionSql);