特定のデータベースが存在するかどうか確認する
※MySQLを前提として書いています
クエリ一発で確認できます。
SHOW DATABASES LIKE 'DB名'
DB名指定しなければ一覧取れます。
SHOW DATABASES
さらに、PHPでユーザ入力値の名前のデータベースが存在するかどうか確認したかったんですが、
// クエリ生成 $query = "SHOW DATABASES LIKE 'hoge' "; // 実行 // (フレームワークとかによるので省略。いつもの感じで)
→もちろん普通に結果が取れる。
$db_name = "hoge"; // クエリ生成 $query = "SHOW DATABASES LIKE '" . $db_name . "' "; // 実行 // (省略)
→取れる。でも直接埋め込むのはセキュリティ的によろしくないからプレースホルダにしたい。
$db_name = "hoge"; // クエリ生成 $query = "SHOW DATABASES LIKE ? "; $param = array( $db_name, ); // 実行 // (省略)
→取れない。なんでや!!
色々試してみましたが何故か解決しなかったのですっぱりあきらめました。
$db_name = "hoge"; // クエリ生成 $query = "SHOW DATABASES "; // 実行 $result = 【クエリ実行した結果の配列】; foreach ($result as $val) { if ($val['Database'] == $db_name) { // 存在している! } }
ぐぬぬ。スゲー無駄な感じ。
array_columnが使えるバージョンなら↓かな。使えないから動作確認してないけど。
$db_name = "hoge"; // クエリ生成 $query = "SHOW DATABASES "; // 実行 $result = array_column(【クエリ実行した結果の配列】, "Database"); if (in_array($db_name, $result)) { // 存在している! }