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 avec une Table Temporaire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 19
    Points : 17
    Points
    17
    Par défaut Erreur avec une Table Temporaire
    Bonjour,
    J'utilise une table temporaire, dans un script php, mais lors de l'exécution, j'ai le message :
    Error: Table 'xxx' doesn't exist temporaire

    Pourtant dans mon code j'ai la connexion à la Base de Données, le code ci-dessous, et après l'instruction mysql_close();

    De plus j'ai testé l'instruction de création de table temporaire dans phpmyadmin et je n'ai pas d'erreur.

    Voyez-vous pourquoi j'ai cette erreur et comment la corriger ?

    Merci d'avance.


    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
    <?php
    if($diff != 0)
    {
    	$prix_total = 0;
    	$reser = mysql_query("SELECT * FROM reservation");
    	mysql_query("CREATE TEMPORARY TABLE reservation_pro(`id_location` INT(10) NOT NULL default '', `id_semaine` INT(2) NOT NULL default '', `tarif` FLOAT(6,2) NOT NULL default '', CONSTRAINT PK_id PRIMARY KEY (`id_location`, `id_semaine`))");
    	while($reservation = mysql_fetch_array($reser))
    	{
    		$test = true;
    		$i = $date_pre['id_semaine'];
    		while($test && $i<=$date_sui['id_semaine'])
    		{
    			$resa = mysql_query("SELECT * FROM reservation WHERE id_semaine='".$i."' AND id_location='".$reservation['id_location']."'");
    			$nbr_resa = mysql_num_rows($resa);
    			$res_resa = mysql_fetch_array($resa);
    			if($nbr_resa = 0)
    			{
    				$test=false;
    			}
    			$prix_total .= $res_resa['tarif'];
    			$i++;
    		}
    		if($test && ($prix_total<=$budget_maximum))
    		{
    			while($i<=$date_sui['id_semaine'])
    			{
    				$resa = mysql_query("SELECT * FROM reservation WHERE id_semaine='".$i."' AND id_location='".$reservation['id_location']."'");
    				$res_resa = mysql_fetch_array($resa);
    				mysql_query("INSERT INTO reservation_pro(id_location, id_semaine, tarif) VALUES('".$reservation['id_location']."', '".$i."', '".$res_resa['tarif']."')");
    				$i++;
    			}
    		}
    	}
    	$req = "SELECT r.id_location FROM location_de_vacances INNER JOIN reservation_pro r ON id_location_de_vacances=r.id_location INNER JOIN planning p ON r.id_semaine=p.id_semaine WHERE pays_id='".$pays."'";
    }
    ?>

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    déjà tu utilise des variable comme $reser dont tu as aucune garantie du contenu (booléen en cas d'erreur, ressource en cas de succès de la requête)...

    ensuite vaut mieux éviter de ne pas traiter immédiatement le résultat d'une requête avant d'en lancer une autre... je suis pas sur que le mécanisme de bufferisation des résultat aime bien ça, même si tu configure le connecteur mysql de php que tu utilises en mode multi-requête...


    en gros: tu lances une requête, tu exploite juste après les résultats... sinon ça a plus que de grandes chances de faire ce que tu obtiens...

    commence donc par rectifier ça

    ensuite utilise plutot mysqli ou pdo comme connecteur mysql, le connecteur mysql n'est plus maintenu actuellement et risque de disparaitre des futures versions...

    quand tu veux faire un truc comme ça il peut être plus simple de passer par une procédure stockée pour effectuer tes différentes tâche côté mysql et n'avoir qu'un seul appel à faire côté php pour obtenir les résultats...

    ça te donne déjà des idées

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2009
    Messages : 35
    Points : 33
    Points
    33
    Par défaut
    Fais gaffe à une chose : les tables temporaires sont détruites dès la fin de la connexion...

    Deux trois conseils: utilise PDO ou mysqli déjà comme l'a dit ericdu69. Tu te casseras moins la tête avec la sytntaxe et aussi tu pourra bénéficier des fonctions de protections des variables d'entrées (prepareStatement, quote() ...)

    Aussi entoure toujours ta requête d'un try -> catch pour gérer les erreurs. En effet tu ne dois pas "fetcher" un resultat si tu n'est pas sur que c'est un objet fetchable (si ta requête échoue, il va tenter quand même le while sur un truc bidon donc c'est pourri )

    Pour te problème de temporary table, je sais pas si c'est là tout ton code, ou si tu effectue en close entre temps, mais sache que le close va dégager toutes les tables temporaires créées dans cette connexion...

    Je vois pas d'ailleurs l'intérêt de créer ici une table temporaire. si c'est pour des besoins de performance, tu peux utiliser l'engine MEMORY et faire une table normale, (oublie pas de la dropper à la fin)

    Sinon tu peux également créer une VUE peut-être est ce même la meilleur solution, après je sais pas ce que tu veux faire avec

    Guillaume

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'utilisation du IF avec une table temporaire
    Par yonnel dans le forum Développement
    Réponses: 6
    Dernier message: 08/01/2013, 16h01
  2. Réponses: 8
    Dernier message: 23/05/2012, 17h49
  3. Php panier virtuel avec stockage de la quantité dans une table temporaire
    Par otmaneha dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/08/2011, 12h06
  4. Réponses: 2
    Dernier message: 19/06/2008, 17h46
  5. Réponses: 2
    Dernier message: 17/10/2006, 11h54

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