4

PDO を使用してデータベースを削除したいと考えています。

このアプローチは私にとって最高のものでした

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

しかし残念ながら、バインドされた値 ($database) の近くに構文エラーがあるという PDOException が発生しました。

致命的なエラー: キャッチされない例外 'PDOException' とメッセージ 'SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。「?」の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。1行目'

だから私は次のようにクエリを実行しようとしました

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

そして、それは機能します。

準備されたステートメントが機能しない理由と、2番目のクエリが保護されているかどうか疑問に思っていました。

あなたのアイデアを前もってありがとう!

4

2 に答える 2

5

テーブル名、データベース名などにバインディング値を使用することはできません。

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

于 2017-01-02T17:17:48.217 に答える
0

私の知る限り、PDO は列名のバインディングのみを受け入れます。

たぶん、この質問はあなたを助けるでしょう!

PHP PDOステートメントは、テーブルまたは列の名前をパラメーターとして受け入れることができますか?

于 2017-01-02T17:16:27.403 に答える