2009-02-12 4 views
0

Je possède ce code:Comment puis-je sélectionner la base de données mysql en php?

   if(!mysql_connect($host,$user,$passwd)){ 
        die("Hoops, error! ".mysql_error()); 
       } 

... aucune erreur d'ici.

   if(!mysql_select_db($db,$connect)){ 
        $create_db = "CREATE DATABASE {$db}"; 
        mysql_query($create_db,$connect); 
        mysql_query("USE DATABASE {$db}",$connect); 
       } 

... erreur "Aucune base de données sélectionnée" à partir d'ici. Je voudrais sélectionner la base de données si elle existe et si ne la crée pas et la sélectionne.

Pourquoi mon code n'est pas correct?

Nous vous remercions à l'avance

+0

Etes-vous sûr que $ db est un nom de base de données valide ? –

+0

oui j'en suis sûr (ses employeurs), je l'ai essayé aussi sans variable et ça n'a toujours pas marché. – Adriana

+0

Qu'est-ce que c'est avec les accolades? Je n'ai pas travaillé avec mysql/php depuis des lustres, mais je ne m'en souviens pas du tout. – patricksweeney

Répondre

3

Où êtes-vous enregistrez la valeur retournée par mysql_connect()? Ne le vois pas ici. Je suppose que $ host, $ user, $ password et $ db sont correctement définis à l'avance. Mais vous passez un paramètre à mysql_select_db qui peut ne pas être correctement défini.

$connect = mysql_connect($host,$user,$passwd); 
if (!$connect) { 
    die('Could not connect: ' . mysql_error()); 
} 
if(!mysql_select_db($db,$connect)) ... 

Commencez par vérifier si vous pouvez sélectionner sans la première requête CREATE. Essayez une requête SELECT simple pour démarrer. Si vous pouvez vous connecter, sélectionnez la base de données et exécutez une requête SELECT, c'est une étape. Puis essayez la requête CREATE. Si cela ne fonctionne pas, c'est presque certainement une question de permissions.

+0

Mes paramètres sont corrects.J'ai la variable $ connect définie comme vous l'avez écrit ici.Connexion est sans erreur, il ne veut tout simplement pas sélectionner DB.J'en ai aucune idée.Avez-vous? – Adriana

+0

Pouvez-vous exécuter une requête SELECT simple sur $ db? Quitter la requête CREATE pour tester.Est-ce que vous obtenez une erreur? Si oui, quel mysql_errno est retourné? – PartialOrder

1

Vous pourriez avoir besoin de créer la base de données des autorisations pour l'utilisateur qui tente de créer la base de données. Ensuite, vous devez utiliser une ressource de connexion valide. $ connect ne semble jamais être affecté à la ressource de connexion.

+0

le même utilisateur peut créer une base de données à partir de la ligne de commande. Je reçois une erreur "Aucune base de données sélectionnée", rien de plus. – Adriana

0

Vous devriez vérifier la valeur de retour de mysql_query() - actuellement si l'un de ces appels échouent, vous ne saurez pas à son sujet:

if(!mysql_select_db($db,$connect)){ 
    if (!mysql_query("CREATE DATABASE $db", $connect)) { 
     die(mysql_error()); 
    } 

    if (!mysql_select_db($db, $connect)) { 
     die(mysql_error()); 
    } 
} 
+0

c'est tellement bizarre, ça ne signale aucune erreur. Il dit "aucune base de données sélectionnée" seulement au moment où je veux insérer des données dans la table. – Adriana

1

Pourquoi ne pas utiliser simplement le CREATE DATABASE SINON EXISTE syntaxe au lieu?

Quelque chose comme ça ...

$con = mysql_connect('localhost'); 
    $sql = 'CREATE DATABASE IF NOT EXISTS {$db}'; 
    if (mysql_query($sql, $con)) { 
    print("success.\n"); 
    } else { 
    print("Database {$db} creation failed.\n"); 
    } 
    if(!mysql_select_db($db,$connect)){ 
    print("Database selection failed.\n"); 
    } 
+0

J'ai essayé votre code, mais le retour a échoué et a échoué :(. $ Variable $ connect est correct, il ne renvoie aucune erreur, donc je ne sais vraiment pas où est le problème – Adriana

+0

Semble comme votre utilisateur MySQL doesn ' – staticsan

0

Changer la ligne

mysql_query($create_db,$connect); 
mysql_query("USE DATABASE {$db}",$connect); 

Pour

mysql_query($create_db,$connect); 
mysql_select_db($db);* 

et cela devrait fonctionner.

+0

Je ne vois pas pourquoi ce serait différent ... –

0

Je voudrais remercier à vous tous, cependant j'ai trouvé la faute de mon côté. Ce script était en classe et l'une des variables n'était pas définie dans cette classe. Donc je suis vraiment désolé. Je ne sais pas comment considérer la bonne réponse, mais j'ai remarqué mon erreur après avoir lu la réponse de Clayton sur les paramètres pas correctement définis, donc je suppose qu'il est le gagnant;)

+0

@perfectDay Le bon c'est que tu as résolu le problème, je commençais à me demander ce qui s'est passé avec celui-ci ... Merci. – PartialOrder

Questions connexes