Bindparam|Bindvalue Без Обрамления В Ковычки

Добрый день.

Хотел написать такой код, для оптимизации БД MySQL:




    $optimizeCommand = Yii::app()->db->createCommand('

      OPTIMIZE TABLE :tableName;

    ');

    $analyzeCommand = Yii::app()->db->createCommand('

      ANALYZE TABLE :tableName;

    ');

    array_map(function ($tableName) use ($optimizeCommand, $analyzeCommand) {

      $optimizeCommand->execute([':tableName' => $tableName]);

      $analyzeCommand->execute([':tableName' => $tableName]);

    }, ['table1', 'table2', 'table3']);



Но, оказалось что в итоге запросы получаются такие:




      OPTIMIZE TABLE 'table1';

      ANALYZE TABLE 'table2';



т.е. значение параметра tableName обрамляется в ковычки. Это является лишним и влечёт за собой ошибку MySQL:

Можно ли решить эту проблему именно в такой постановке (варианты с генерацией одного большого SQL-запроса для всех таблиц не интересны) ?

Например у метода bindValue есть параметр dataType. Но никакого подходящего значения я не нашёл.

Полагаю, это куда-нибудь в сторону CDbExpression копать надо.




$optimizeCommand->execute([':tableName' => new CDbExpression($tableName)]);



должно помочь

Таже самая ошибка.

Наверное, проблема в том, что нельзя использовать параметры для названий таблиц.

Спасибо за ссылку :)

Всё таки пришлось здесь вот так:




Yii::app()->db->createCommand(implode('', array_map(function ($tableName) {

  return "

    OPTIMIZE TABLE $tableName;

    ANALYZE TABLE $tableName;

  ";

}, ['table1', 'table2'/*, ... */])))->execute();