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)mysqlconfigにconfigparamを追加しました。main.phpで-'enableParamLogging'=>true
2)文字列を'から "に変更しました3)mysqlバージョンの場合に備えて別のパラメータを追加しました-' emulatePrepare'=> true

私には何もうまくいきません。問題はparamsにあると思いましたが、bindColumnメソッドはそれを使用しないので、Yiiの一部のモジュールが構成ファイルなどに含まれていないと推測されます。

私のモデルは次のようになります(/ models dirで作成):

class Movies extends CActiveRecord {

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

  }

}

誰もが不必要な質問を避けるためだけに:データベースはmain.php confファイルで適切に構成されており、テーブルムービーがあり、PK24と27もあります。

DAOでいくつかのパラメータをバインドするための特別なメソッドを使用する場合と、ARでfindByPkまたはfindを使用する場合を除いて、すべてのネイティブSQLは正常に機能します。私はこれが明確であることを願っています、私が(Uが推測するように)間違ったことをすることができるという明白な単純な技術的可能性で私を悩ませないでください。

PSもう1つの役立つ情報-電話するとき

$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バインディングが機能していませんbindColumnbindParam変数を列にバインドする、、または値をバインドする、のみが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

Giiジェネレーターでムービーモデルを生成しましたか、それとも自分で作成しましたか?

編集:

私が知っているように、tableNameを追加する必要があります

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

2つの別々の問題があるかもしれません。少なくとも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 に答える