2012-01-30 38 views
13

データベースを作成したい。なぜこのコードでデータベースが作成されないのですか?PHP mysqlデータベースが存在しない場合は作成する

$dbname = 'regulations_db'; 
    $con = mysql_connect("localhost","root","pass"); 
    if (!$con) 
    { 
     die('Could not connect: ' . mysql_error()); 
    } 
if (mysql_num_rows(mysql_query("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '". $dbname ."'"))) { 
     echo "Database $dbname already exists."; 
    } 
    else { 
     mysql_query("CREATE DATABASE '". $dbname ."'",$con); 
     echo "Database $dbname created."; 
    } 

これは働いているが、私は最初のものがベストプラクティスであると思う:

if (mysql_query("CREATE DATABASE IF NOT EXISTS regulations_db",$con)) 
    { 
     echo "Database created"; 
    } 
    else 
    { 
     echo "Error creating database: " . mysql_error(); 
    } 

答えて

18

は単純なmysql_select_db()を行うと、結果が偽であるならば、作成に進みます。

例として、別の非常にスマートなStackOverflowerでthe first answer hereをチェックしてください。この問題を解決するために

<?php 
// Connect to MySQL 
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password'); 
if (!$link) { 
    die('Could not connect: ' . mysql_error()); 
} 

// Make my_db the current database 
$db_selected = mysql_select_db('my_db', $link); 

if (!$db_selected) { 
    // If we couldn't, then it either doesn't exist, or we can't see it. 
    $sql = 'CREATE DATABASE my_db'; 

    if (mysql_query($sql, $link)) { 
     echo "Database my_db created successfully\n"; 
    } else { 
     echo 'Error creating database: ' . mysql_error() . "\n"; 
    } 
} 

mysql_close($link); 
?> 
+0

素晴らしいアイデア。ありがとうございました! – erdomester

+1

更新:今はmysqli_select_dbを使うべきでしょうか? - "$ db_selected = mysqli_select_db( 'my_db'、$ link);を繰り返すことも意味があります。 (つまり今すぐ動作するはずです)、またはそれをデータベースの存在を確認するためにのみ使用して、そのためにそれ以上の必要性はありませんでしたか? – Julix

4

3つのステップ:

  1. の接続時にデータベース名を指定しないでください。
  2. あなたのSQLステートメントは、存在しない場合はデータベースを作成する必要があります。
  3. mysqli_select_db($ link、 'php1')を呼び出して、接続用のデフォルトデータベースを作成します。
+0

彼が効果的に説明している2番目のコードは何ですか? – Julix

関連する問題