Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/05/2011, 17h10   #1
Invité régulier
 
Femme
Étudiant
Inscription : avril 2011
Messages : 19
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 19
Points : 7
Points : 7
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 :
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."'";
}
?>
Stageuse44 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 10h30   #2
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 848
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
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 : 848
Points : 1 325
Points : 1 325
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
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/05/2011, 14h42   #3
Membre à l'essai
 
Homme
Inscription : janvier 2009
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2009
Messages : 36
Points : 21
Points : 21
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
kayoum est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h37.


 
 
 
 
Partenaires

Hébergement Web