IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Erreur no database selected


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut Erreur no database selected
    Bonjour à tous, ça m'avait presque manqué d'avoir des problèmes tellement prise de tête que je doive venir les partager ici

    Pour un site internet de jeu, nous avons développé des crons pour effectuer des actions sur la base, jusque là, rien de sorcier.

    Seulement voilà un petit matin, sans aucune action apparente de notre part, hors développements habituels sur les fichiers du projet, nous nous retrouvons avec des logs d'erreur...

    Le log signale un "no database selected" pourtant tout le cron s'exécute parfaitement ensuite!

    log.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ----------------
    Error on the file : cron.php 
    Bad Request : SELECT COUNT(id) FROM table WHERE active = 1 AND attitude IS NOT NULL
    Error : No database selected
    Date : 2009-03-31 07:00:02
    ----------------
    $_SESSION:
    ----------------
    NULL
     
    -------------------
    Concrètement :

    dbmanager.inc.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    <?php
     
    //////////////////////////////////////////////////
    // Titre : dbmanager.inc.php
    // Description: Ce fichier sert de base à la gestion des accès BDD
    // Classe mère : Aucune
    // Classes filles: Aucune
    // Responsable : Linio
    //////////////////////////////////////////////////
     
    class DBManager {
     
    public static function connect(){
    	mysql_connect('monhote','login','pass');
    	mysql_select_db('madb');
    	mysql_query("SET NAMES 'utf8'");
    }
     
     
    public static function processQuery($query){
     
    	$ressourceLink = mysql_query($query);
     
    	if ($ressourceLink)
    		return $ressourceLink;
    	else{
    	// Erreur dans la requête
    		$file = array_pop(explode('/', $_SERVER['PHP_SELF']));
    		$handle = fopen("monlog.txt", "a");
    		$error = '
    ----------------
    Error on the file : '.$file.' 
    Bad Request : '.$query.'
    Error : '.mysql_error().'
    Date : '.date("Y-m-d H:i:s").'
    ----------------
    $_SESSION:
    ----------------
    ';
    ob_start();
    var_dump($_SESSION);
    $error .= ob_get_contents();
    ob_end_clean();
    $error .= '
    -------------------
    ';
    		fwrite($handle,$error);
    		exit('<b>ERREUR : Une requête SQL a provoqué une Erreur, un administrateur a été contacté pour régler le problème.</b>');
     
    	}	
    }
     
    [...]
     
    }
     
    ?>
    cron.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    <?php
     
    // Le fichier config ne contient que des lignes de define("var","valeur");
    include_once ('../includes/config.inc.php');
    require_once ('../classes/dbmanager.inc.php');
     
    DBManager::connect();
     
     
    $link = DBManager::processQuery('SELECT COUNT(id) FROM table WHERE active = 1');
    $count = mysql_fetch_row($link);
     
    [...]
     
    ?>
    Tous les fichiers lancés par cron ont le même problème (4 crons au total).
    Vous avez une idée parce que mon admin système et moi séchons méchamment

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Peut-être une histoire de portée de variable...

    Si tu essayais de stocker le lien avec la base en tant qu'attribut statique dans ta classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    class DBManager {
     
    protected static $lnk;
     
    public static function connect(){
        self::$lnk = mysql_connect('monhote','login','pass');
        mysql_select_db('madb', self::$lnk);
        mysql_query("SET NAMES 'utf8'", self::$lnk);
    }
     
    public static function processQuery($query){
     
        $ressourceLink = mysql_query($query, self::$lnk);
     
        if ($ressourceLink)
            return $ressourceLink;
        else{
     
     
    [...]
     
     
    }

  3. #3
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Bonjour, merci pour la réponse.
    Apparemment ça n'est pas ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error : No database selected
    Date : 2009-04-14 18:20:01
    C'aurait été étrange cela dit parce que le site utilise la même classe pour se connecter, et y'a jamais aucun soucis, qui plus est, seule la "première" requête déconne (enfin elle déconne pas vraiment, elle renvoie juste cette erreur, tout le reste marche bien.

    Une autre idée?

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    La première requête quelle qu'elle soit ? Ou la première requête (toujours la même) du script ?

  5. #5
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Et bien la première requête quelle qu'elle soit, mais bon là en l'occurence on ne la change pas, donc c'est toujours la même (cependant comme précisé plus haut tous les crons plantent avec des requêtes différentes en "première requête")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Error on the file : cron24.php 
    Bad Request : SELECT id, element, control FROM unetable
    Error : No database selected
    Date : 2009-04-15 00:00:02
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Error on the file : cron6.php 
    Bad Request : SELECT race, 
    	COUNT(id) as nb, 
    	SUM(money) as mn
    	FROM unetable INNER JOIN uneautretable ON unetable.id = uneautretable.id 
    	GROUP BY unchamp
    Error : No database selected
    Date : 2009-04-15 00:00:02
    Très étrange un des crons (cron1.php) ne plante pas, sa première requête :
    Totalement incompréhensible...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut
    mdr l'erreur a ce tué : j'avoue je l'ai chercher!

    Le probleme c'est que tu ne test pas ce que te renvoi mysql_select_db qui en fait a une erreur car tu as ... pas noté le bon nom de la base ...
    mais l'erreur s'affiche que plus tard quand tu fais ton processQuery!

    Je l'ai tester, avec un nom de base qui marche tout marche, avec un nom qui ne marche pas ben ca me donne ton message d'erreur!

    don change ton mysql_select_db!

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Par défaut
    Si c'est ça, vraiment bien vu !
    Parce qu'il fallait aller le chercher... et on ne pouvait pas le « voir » avec les infos fournies.

  8. #8
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Hum...

    Non ça n'est pas ça.
    Et c'est plutôt logique vu que comme je le précisais, mon script est bien exécuté malgré le retour d'erreur.

    Mon nouveau code de connection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static function connect(){
    	$link = mysql_connect('localhost','login','pass');
    	if (!$link){
    		$handle = fopen("monlog.txt", "a");
    		fwrite($handle,mysql_error());
    	}
     
    	$db = mysql_select_db('madb');
    	if (!$db){
    		$handle = fopen("monlog.txt", "a");
    		fwrite($handle,mysql_error());
    	}
    	mysql_query("SET NAMES 'utf8'");
    }
    Je vous le donne en mille, mon cron m'a affiché exactement la même erreur, sans aucune mention de problème à la connection. Le reste de mon site fonctionne toujours correctement...

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Par défaut
    va falloir que tu donne plus de code que juste ce bout la pour comprendre parce que la ... ben c'est juste ca devrait marcher sans souci!

    donne aussi la version de mysql et de php on sait jamais!

  10. #10
    Membre éclairé Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Par défaut
    Ben il n'y a pas vraiment plus de code...

    Versions :
    PHP Version 5.2.4-2ubuntu5.5
    mysql Client API version 5.0.51a

Discussions similaires

  1. [MySQL] Erreur "no database selected"
    Par guyanais dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/10/2013, 19h45
  2. [MySQL] no database selected + petite erreur de fonction!
    Par Ayosha dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/06/2011, 11h19
  3. [MySQL] Erreur SQL : No database selected , je ne comprend pas :(
    Par nico77580 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/07/2010, 11h04
  4. [MySQL] erreur : No database selected
    Par MSM_007 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/04/2010, 14h17
  5. Erreur No database selected
    Par legide dans le forum JDBC
    Réponses: 1
    Dernier message: 05/08/2009, 18h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo