-1

私は次のコードシーケンスを持っています:

if (is_array($team) && !empty($team)) {
    $where_clause = "WHERE te.name IN (";
    $in_elems = array();
    foreach ($team as $key => $value) {
        $in_elems[] = "':team_$key'";
    }
    $where_clause .= implode(',', $in_elems) . " )";
    $query = "SELECT p.name FROM " . Yii::app()->params['team_tbl'] . " te  
         LEFT JOIN " . Yii::app()->params['player_tbl'] . " p ON te.id = p.team_id
         $where_clause 
         ORDER BY te.name, p.name ASC
    ";
    $command = $conn->createCommand($query);
    foreach ($team as $key => $value) {
        $command->bindValue(":team_$key", $value);
    }
} else {
    ....
}
if ($command) {
    $dataReader = $command->query();
    print_R($dataReader->count()); ---> here is 0!!!
    while(($player = $dataReader->read()) !== false) {
        $players[] = array(
            'label'=>$player['name'],
            'id'=>$player['name'],
    );
}

このコード シーケンスを実行すると、dataReader が空のように見え、その理由がわかりません。

4

3 に答える 3

1

問題は PDO パラメーターのバインドに関するものですが、現時点ではデバッグできません。バリアントのよりエレガントな実用的なソリューションを提供できます(クエリビルダーを使用):

$models = Yii::app()->db->createCommand()
    ->select('p.name')
    ->from('team te')
    ->join('player p', 'te.id=p.team_id')
    ->where(array('in', 'te.id', $team))
    ->order('te.name, p.name ASC')
    ->queryAll();

$players = array();
foreach ($models as $model) {
    $players[] = array(
        'label' => $model['name'],
        'id' => $model['name']
    );
}
于 2013-10-21T20:36:45.987 に答える
0

DO queryAll():

$dataReader = $command->queryAll();
于 2013-10-20T11:33:46.050 に答える