Переменная PDO является частью имени таблицы

Я пытаюсь связать переменную, которая является частью имени таблицы при использовании связывания PDO, чтобы предотвратить внедрение SQL.

мой запрос похож на это:

    select * from user_:id_user.kb_:id_kbase "."_frequencies"

что должно привести к

    select * from user_1.kb_123_frequency

где user_1.kb_123_frequency предполагаемое имя таблицы. Однако, когда параметры связаны в:

    $st->bindParam(':id_user', $id_user, PDO::PARAM_INT);
    $sth->bindParam(':id_kbase', $id_kbase, PDO::PARAM_INT);
    $sth->execute();

он не связывается и выдает ошибку:

Исключение произошло.

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: :id_kbase

я верю, что это из-за того, что я пытаюсь объединитьkb_:id_kbase" с "_frequencies" но :kb_kbase это параметр.

поэтому мой вопрос: можете ли вы передать имя таблицы в качестве параметра, и если да, то как сделать привязку, когда параметр является частью имени таблицы?

Ваша помощь очень ценится

1 ответ

Решение

Подготовленные заявления не работают таким образом.

Лучший (самый безопасный) способ сделать это - принять только определенный набор значений, например, используя switch заявление.

switch ($tbl) {
    case "baz":
    case "foo":
        $tbl = "bar".$tbl;
        break;
}
Другие вопросы по тегам