2011-05-16 4 views
1

Le code ci-dessous fonctionne correctement sauf qu'il émet un avertissement lors de la connexion à une base de données inexistante. Cela fonctionne bien dans les produits où les erreurs sont désactivées, mais je préférerais ne pas avoir d'erreurs si je n'en ai pas besoin.Vérification de l'existence d'une base de données (mysql + php)

function cpanel_db_connect($dbname) { 
    // normalize 
    $dbname = convert_to_slug($dbname); 
    $dbname = CPANEL_USER . '_' . $dbname; 

    $dbuser = CPANEL_USER . '_' . CPANEL_DB_USER; 

    // connnect database 
    $mysqli = new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname); 

    if ($mysqli->connect_error) { 
     return false; 
    } 

    return $mysqli; 
} 
+1

Vous pourriez être en mesure de supprimer simplement les erreurs avec l'opérateur '' @ de, par exemple $ mysqli = @ nouveau mysqli (CPANEL_DB_HOST, $ dbuser, CPANEL_DB_PASS, $ dbname); ' –

+2

Puisque vous utilisez la version OOP de mysqli, faites un essai/catch autour de la section connect. –

+0

Quel avertissement/erreur obtenez-vous? –

Répondre

1
$mysqli = @new mysqli(CPANEL_DB_HOST, $dbuser, CPANEL_DB_PASS, $dbname); 

Les travaux ci-dessus!

+1

Vous pouvez rechercher un login dédié pour ce genre de chose et interroger directement la base de données INFORMATION_SCHEMA: 'select SCHEMA_NAME from INFORMATION_SCHEMA.SCHEMATA où SCHEMA_NAME = 'votre nom de base de données ici' est préférable à la tentative de connexion au pas là) base de données et vérification d'une erreur. –

3

Je sais qu'il est un peu trop tard pour une réponse et qu'il y en a déjà une acceptée mais je laisserai le commentaire au cas où quelqu'un en aurait besoin dans le futur.

Ce n'est pas une bonne pratique de supprimer les avertissements/erreurs en utilisant le signe @ en PHP. Vous pourriez accidentellement supprimer un nom d'utilisateur ou un mot de passe invalide et vous ne le sauriez jamais.

Une façon plus appropriée de vérifier si la base de données existe est la création d'une nouvelle instance de Mysql ou Mysqli (sans spécifier la base de données par défaut) et l'exécution de la requête suivante (semblable au commentaire de Marc B):

SELECT COUNT(*) AS `exists` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME='my_database_name' 

Ensuite, vous pouvez vérifier la valeur de la clé exists pour voir si la base de données est là ou non.

Voici un exemple de code:

// statement to execute 
$sql = 'SELECT COUNT(*) AS `exists` FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMATA.SCHEMA_NAME="my_database_name"'; 

// execute the statement 
$query = $mysqli->query($sql); 
if ($query === false) { 
    throw new Exception($mysqli->error, $mysqli->errno); 
} 

// extract the value 
$row = $query->fetch_object(); 
$dbExists = (bool) $row->exists; 

Il est un peu plus, mais il est plus sûr.

0

Cela fonctionne, il suffit de remplacer $ dbname dans ce code:

if (empty (mysql_fetch_array(mysql_query("SHOW DATABASES LIKE '$dbname' ")))){ 
echo "DB does Not exist"; }else{ echo "DB exists!";} 
Questions connexes