読者です 読者をやめる 読者になる 読者になる

アナログCPU:5108843109

ゲームと音楽とプログラミング(酒と女とロックンロールのノリで)

特定のデータベースが存在するかどうか確認する

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))
{
    // 存在している!
}