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.

12voto

docwhat Punkte 10953

Hier ist eine Bash-Funktion zur Überprüfung, ob eine Datenbank existiert:

function does_db_exist {
  local db="${1}"

  local output=$(mysql -s -N -e "SELECT schema_name FROM information_schema.schemata WHERE schema_name = '${db}'" information_schema)
  if [[ -z "${output}" ]]; then
    return 1 # does not exist
  else
    return 0 # exists
  fi
}           

Eine andere Möglichkeit ist, einfach die Datenbank zu benutzen. Beachten Sie, dass auch hier die Berechtigung geprüft wird:

if mysql "${db}" >/dev/null 2>&1 </dev/null
then
  echo "${db} exists (and I have permission to access it)"
else
  echo "${db} does not exist (or I do not have permission to access it)"
fi

8voto

Junaid Saleem Punkte 165

Eine gute Möglichkeit zu prüfen, ob eine Datenbank in PHP existiert, ist:

$mysql = mysql_connect("<your host>", "root", "");

if (mysql_select_db($mysql, '<your db name>')) {
    echo "Database exists";
} else {
    echo "Database does not exist";
}

Das ist die Methode, die ich immer anwende.

8voto

inemanja Punkte 1242

Bash verwenden:

if [ "`mysql -u'USER' -p'PASSWORD' -se'USE $DATABASE_NAME;' 2>&1`" == "" ]; then
    echo $DATABASE_NAME exist
else
    echo $DATABASE_NAME doesn't exist
fi

8voto

Thomas Williams Punkte 1458

Für diejenigen, die php mit mysqli verwenden, ist dies meine Lösung. Ich weiß, die Antwort wurde bereits beantwortet, aber ich dachte, es wäre hilfreich, die Antwort als mysqli vorbereitet Anweisung zu haben.

$db = new mysqli('localhost',username,password);
$database="somedatabase";
$query="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=?";
$stmt = $db->prepare($query);
$stmt->bind_param('s',$database);
$stmt->execute();
$stmt->bind_result($data);
if($stmt->fetch())
{
    echo "Database exists.";
}
else
{
    echo"Database does not exist!!!";
}
$stmt->close();

7voto

Wadih M. Punkte 11645

Seien Sie vorsichtig, wenn Sie mit einer "like"-Anweisung auf Existenz prüfen!

Wenn eine Reihe unglücklicher Ereignisse dazu führt, dass Ihre Variable leer ist, und Sie am Ende diesen Befehl ausführen müssen:

SHOW DATABASES like '' -- dangerous!

Es wird zurückgegeben ALLE Datenbanken und teilt so dem aufrufenden Skript mit, dass sie existiert, da einige Zeilen zurückgegeben wurden.

Es ist viel sicherer und besser, einen "=" Gleichheitszeichen, um die Existenz zu prüfen.

Die korrekte und sichere Art und Weise, die Existenz zu prüfen, sollte sein:

SHOW DATABASES WHERE `database` = 'xxxxx' -- safe way to test for existence

Beachten Sie, dass Sie den Spaltennamen Datenbank mit Backticks einschließen müssen, es kann in diesem Fall keine entspannte Syntax verwendet werden.

Wenn der Code, der die Variable 'xxxxx' erzeugt, ein Leerzeichen zurückgibt, gibt SHOW DATABASES nicht ALLE Datenbanken, sondern eine leere Menge zurück.

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