Я использую PDO и хочу сделать что-то вроде этого:
$query = $dbh->prepare("SELECT * FROM :table WHERE :column = :value"); $query->bindParam(':table', $tableName); $query->bindParam(':column', $columnName); $query->bindParam(':value', $value);
Будет ли PDO разрешать мне привязывать имя таблицы и имя столбца, как это? Кажется, это разрешено, но оно ставит кавычки вокруг моих параметров, даже если я использую PDO :: PARAM_INT или PDO :: PARAM_BOOL в качестве типа данных.
Если это не сработает, как я могу безопасно избежать моих переменных, чтобы я мог интерполировать их в запросе?
К сожалению, вы не можете привязывать параметры по именам столбцов.
Вы можете попробовать динамически создать команду SQL:
$sql = "SELECT * FROM $tableName WHERE $columnName = :value"; $query = $dbh->prepare($sql); $query->bindParam(':value', $value);
Просто убедитесь, что вы дезинфицируете свои параметры / переменные, если они приходят из других источников, чтобы предотвратить внедрение SQL. В этом случае $value
безопасно до степени, но $tableName
и $columnName
не являются – опять же, особенно, если значения для этих переменных не предоставляются you
а вместо этого вашими пользователями / vistors / etc …
Еще одна вещь; избегайте использования *
и называйте свои столбцы … Посмотрите, почему:
http://www.jasonvolpe.com/topics/sql/
Проблемы с производительностью при использовании SELECT *?
Другие похожие сообщения здесь:
Почему параметр привязки в предложении ORDER BY не упорядочивает результаты?
Как установить параметры ORDER BY с помощью подготовленной инструкции PDO?
Из вашего вопроса неясно, почему вы хотите «привязать» имя таблицы.
Параметры привязки параметров PDO
Создание таблицы или переменной представления приведет к поражению цели предварительной работы оператора.