355 Stimmen

Wie prüft man, ob eine mysql-Datenbank existiert?

Ist es möglich zu überprüfen, ob eine (MySQL) Datenbank existiert, nachdem eine Verbindung hergestellt wurde.

Ich weiß, wie ich prüfen kann, ob eine Tabelle in einer DB existiert, aber ich muss prüfen, ob die DB existiert. Wenn nicht, muss ich einen anderen Code aufrufen, um sie zu erstellen und zu füllen.

Ich weiß, das klingt alles etwas unelegant - dies ist eine schnelle und schmutzige Anwendung.

2voto

Can O' Spam Punkte 2515

Langatmig und verworren (aber haben Sie Geduld mit mir!), hier ist ein Klassensystem, das ich gemacht habe, um zu prüfen, ob eine DB existiert und auch um die benötigten Tabellen zu erstellen:

<?php
class Table
{
    public static function Script()
    {
        return "
            CREATE TABLE IF NOT EXISTS `users` ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT );

        ";
    }
}

class Install
{
    #region Private constructor
    private static $link;
    private function __construct()
    {
        static::$link = new mysqli();
        static::$link->real_connect("localhost", "username", "password");
    }
    #endregion

    #region Instantiator
    private static $instance;
    public static function Instance()
    {
        static::$instance = (null === static::$instance ? new self() : static::$instance);
        return static::$instance;
    }
    #endregion

    #region Start Install
    private static $installed;
    public function Start()
    {
        var_dump(static::$installed);
        if (!static::$installed)
        {
            if (!static::$link->select_db("en"))
            {
                static::$link->query("CREATE DATABASE `en`;")? $die = false: $die = true;
                if ($die)
                    return false;
                static::$link->select_db("en");
            }
            else
            {
                static::$link->select_db("en");          
            }
            return static::$installed = static::DatabaseMade();  
        }
        else
        {
            return static::$installed;
        }
    }
    #endregion

    #region Table creator
    private static function CreateTables()
    {
        $tablescript = Table::Script();
        return static::$link->multi_query($tablescript) ? true : false;
    }
    #endregion

    private static function DatabaseMade()
    {
        $created = static::CreateTables();
        if ($created)
        {
            static::$installed = true;
        }
        else
        {
            static::$installed = false;
        }
        return $created;
    }
}

Darin können Sie den Namen der Datenbank ersetzen en mit einem beliebigen Datenbanknamen und ändern Sie auch das Erstellungsskript in irgendetwas und (hoffentlich!) wird es nicht kaputt gehen. Wenn jemand dies verbessern kann, lassen Sie es mich wissen!

Hinweis
Wenn Sie Visual Studio nicht mit PHP-Tools verwenden, machen Sie sich keine Sorgen über die Regionen, sie sind für die Code-Faltung :P

1voto

Apostolos Punkte 2791

Ich verwende einfach die folgende Abfrage:

"USE 'DBname'"

Prüfen Sie dann, ob das Ergebnis FALSCH ist. Andernfalls könnte es einen Fehler "Zugriff verweigert" geben, aber das kann ich nicht wissen. Also, im Falle der beteiligten Privilegien, kann man verwenden:

"SHOW DATABASES LIKE 'DBname'"

wie bereits erwähnt.

1voto

Stiegi Punkte 169

Eine andere php-Lösung, aber mit PDO:

<?php
try {
   $pdo = new PDO('mysql:host=localhost;dbname=dbname', 'root', 'password', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]);
   echo 'table dbname exists...';
}
catch (PDOException $e) {
   die('dbname not found...');
}

1voto

deadlydog Punkte 20641
IF EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = N'YourDatabaseName')
BEGIN    
    -- Database exists, so do your stuff here.
END

Wenn Sie MSSQL anstelle von MySQL verwenden, lesen Sie dies Antwort aus einem ähnlichen Thread .

1voto

wxianfeng Punkte 147

Rails Code:

ruby-1.9.2-p290 :099 > ActiveRecord::Base.connection.execute("USE INFORMATION_SCHEMA")

ruby-1.9.2-p290 :099 > ActiveRecord::Base.connection.execute("SELECT SCHEMA_NAME FROM         INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'entos_development'").to_a
SQL (0.2ms) SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME =               'entos_development'
=> [["entos_development"]] 
ruby-1.9.2-p290 :100 > ActiveRecord::Base.connection.execute("SELECT SCHEMA_NAME FROM              INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'entos_development1'").to_a
SQL (0.3ms) SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME =            'entos_development1'
=> []

\=> entos_development existiert, entos_development1 existiert nicht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X