1

我是 Yii 的新手,一切似乎都很好,但问题是,当我使用绑定参数时,比如(DAO stile):

$command = $this->conn->createCommand($sql);

$command->bindColumn("title", "test_title");

$result = $command->query();

或(活动记录):

$row = Movies::model()->find("m_id=:m_id", array(":m_id"=>27));
    or
$row = Movies::model()->findByPk(24); 

我已经尝试了一切:1)向mysql config添加了一个配置参数。在 main.php - 'enableParamLogging' => true
2) 将字符串从 ' 更改为 " 3) 添加另一个参数以防 mysql 版本 - 'emulatePrepare'=>true

没有什么对我有用。我认为问题出在参数上,但是 bindColumn 方法没有使用它,所以我的假设是 Yii 的某些模块没有包含在配置文件或类似的东西中。

我的模型看起来像这样(在 /models 目录中创建):

class Movies extends CActiveRecord {

  public static function model($className = __CLASS__) {
    parent::model($className);

  }

}

只是为了让大家避免不必要的问题:在 main.php conf 文件中正确配置了数据库,有一个表movies,还有一个 PKs 24 和 27。

除了在 DAO 中使用特殊方法绑定某些参数以及在 AR 中使用 findByPk 或 find 之外,所有本机 SQL 都可以正常工作。我希望这很清楚,伙计们不要用明显的简单技术可能性来打扰我,我可以(正如你所假设的那样)做错了。

PS 另一个有用的信息 - 打电话时

$command->bindColumn("title", "test_title");

FW 抛出异常 - CDbCommand 及其行为没有名为 "bindColumn" 的方法或闭包。所以,如上所述,我认为 Yii 没有看到那些特殊的方法,这是肯定的。我该如何修复它?

好的,为什么这段代码也不起作用?没有例外,只是空白页。

$sql = "SELECT title, year_made FROM movies WHERE year_made=':ym'";

$command = $this->conn->createCommand($sql);

$command->bindParam(":ym", "2012", PDO::PARAM_STR);

$result = $command->query();
4

3 回答 3

4

DAO 绑定不起作用,因为没有bindColumn. 您只有bindParam, 将变量绑定到列,或者bindValue, 将值绑定。我不知道 AR 查询有什么问题。

编辑:您的 DAO 代码应如下所示:

$sql = "SELECT * FROM sometable WHERE title = :title";
$command = $this->conn->createCommand($sql);
$command->bindParam(":title", $tile_var);
$result = $command->query();
于 2012-08-12T07:00:37.723 回答
0

您可能有两个不同的问题。至少您的 DAO 代码(如果这是您的代码中实际拥有的)绑定错误。

绑定需要在查询完成之前发生(并且在命令对象上完成),而不是在结果对象上。在此处查看更多信息:http ://www.yiiframework.com/doc/guide/1.1/en/database.dao#binding-parameters

就您的 AR 查询而言,这些也可能存在问题。您可以使用findByAttributes而不是这条线(虽然你的线应该工作):

$row = Movies::model()->find("m_id=:m_id", array(":m_id"=>27));

如果您有标准id密钥,则以下内容应该可以工作。如果您不这样做(并且正在使用 m_id,您是否设置了模型的primaryKey()功能?

$row = Movies::model()->findByPk(24); 

此外,如果这改变了您处理结果的方式,您将得到一个模型对象,而不是一行......

于 2012-08-12T04:27:46.887 回答
0

你是用 Gii 生成器生成电影模型还是你自己写的?

编辑:

据我所知,您必须添加 tableName

public function tableName() {
    return 'movies';
}
于 2012-08-11T19:14:48.403 回答