pdo — PHP / MYSQL — удалить базу данных, используя подготовленный оператор

Я хотел бы удалить базу данных, используя PDO.

Этот подход был лучшим для меня

function delete_db($database)
{
$statement = $my_pdo_obj->prepare("DROP DATABASE IF EXISTS :database");
$statement->bindParam(":database", $database);
$statement->execute();
}

Но, к сожалению, я получил исключение PDOException, в котором говорится о синтаксической ошибке рядом с моим связанным значением ($ database):

Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ‘?’ в строке 1 ‘

Поэтому я попытался выполнить запрос следующим образом

function delete_db($database)
{
$statement = $my_pdo_obj->exec("DROP DATABASE IF EXISTS " . $database);
}

И это работает.

Мне было интересно, почему подготовленный оператор не работает, а также, если второй запрос был защищен.

Заранее спасибо за ваши идеи!

3

Решение

Вы не можете использовать значения привязки для имен таблиц, имен баз данных и т. Д.

http://php.net/manual/ru/pdo.prepare.php#111977

4

Другие решения

Насколько я знаю, PDO принимает только привязки для имен столбцов.

Может быть, этот вопрос поможет вам!

Могут ли операторы PHP PDO принимать имя таблицы или столбца в качестве параметра?

0

По вопросам рекламы [email protected]