[PDO]Lors de l'execution:SQLSTATE[HY000]: General error:

Résolu
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   -  
oraceLaLimace Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour
J'essaye de travailler avec l'objet PDO depuis un certain temps et là
je tombe sur cette erreur un peu assez vague.
Voici la requete
-- Creation de la table temporaire --
		CREATE TEMPORARY TABLE tmpfrais(
			MONTANTFRAIS double,
			MONTANTREDUCTION double,
			TYPEREDUCTION varchar(15)
		); 
		-- Verouiller les tables impliquees et Remplir la table tmp --
		LOCK TABLES classe_reduction r READ, classe_frais f READ; 
		INSERT INTO tmpfrais 
			SELECT f.MONTANT, r.MONTANT, r.TYPE 
			FROM classe_reduction r 
			LEFT JOIN classe_frais f ON (r.IDFRAIS = f.ID) 
			WHERE r.ID = 9;  
		-- Selectionner et multiplier --
		SELECT IF( TYPEREDUCTION = 'pourcentage', (MONTANTREDUCTION*MONTANTFRAIS)/100, MONTANTREDUCTION) AS MONTANT 
		FROM tmpfrais;
		-- Deverouiller et tmpfrais se supprime directement 
		UNLOCK TABLES;
		DROP TABLES tmpfrais;

Voici le sens de cette requete.
Je voudrai selectionner la reduction
donc benefierai un etudiant. Ici l'etudiant beneficie de la reduction
dont l'ID est 9. J'y mettrai une liste plutard et utilisera ID IN (liste).
Faut souligner que la requete marche parfaitement sur phpmyadmin
et donne le resultat attendu, mais par l'interface PDO
voici l'erreur
SQLSTATE[HY000]: General error

Trop vague!!!
Quelqu'un peut il m'aider ou élucider le problem?
Merci d'avance pour vos réponses

3 réponses

oraceLaLimace Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   8
 
si il marche parfaitement sur phpmyadmin, peux tu plutôt nous copier ton utilisation dans php ?
0
ajp55 Messages postés 426 Date d'inscription   Statut Membre Dernière intervention   23
 
Merci oraceLaLimace, mais j'ai résolu l probleme autrement, juste par chance, parce que la requete marche bien sur phpmyadmin, je crois q le probleme c'etai donc PDO. Pour résoudre le problem, j'ai découpé ma requete en 4 differente requete et les a executer separament. c'est t'à dire
$pdo->exec('-- Creation de la table temporaire --
		CREATE TEMPORARY TABLE tmpfrais(
			MONTANTFRAIS double,
			MONTANTREDUCTION double,
			TYPEREDUCTION varchar(15)
		); '
);
$pdo->exec('
		-- Verouiller les tables impliquees et Remplir la table tmp --
		LOCK TABLES classe_reduction r READ, classe_frais f READ; 
		INSERT INTO tmpfrais 
			SELECT f.MONTANT, r.MONTANT, r.TYPE 
			FROM classe_reduction r 
			LEFT JOIN classe_frais f ON (r.IDFRAIS = f.ID) 
			WHERE r.ID = 9;  
');
$res = $pdo->query('
		-- Selectionner et multiplier --
		SELECT IF( TYPEREDUCTION = 'pourcentage', (MONTANTREDUCTION*MONTANTFRAIS)/100, MONTANTREDUCTION) AS MONTANT 
		FROM tmpfrais;
');
$pdo->exec("
		-- Deverouiller et tmpfrais se supprime directement 
		UNLOCK TABLES;
		DROP TABLES tmpfrais;"
);

et tout a marche.
0
oraceLaLimace Messages postés 35 Date d'inscription   Statut Membre Dernière intervention   8
 
Oui en effet; tu pouvais pas tout mettre dans le même exec.
Tant mieux pour toi.
C'est bien de réussir par soit même en ayant chercher. Ca change de pas mal de monde..
0