1

Bonjour à tous,

Je code un projet pour l'IUT qui est censé tourner sur postgreSQL. Comme MySQL est plus facile à installer sur mac, j'ai installé MySQL et j'ai décidé de faire un fichier .php d'équivalences de fonctions pour chaque SGBD, comme ça je n'ai qu'à inclure le fichier correspondant à mon SGBD utilisé (et au passage je le rajouterais dans le dossier pour vanter la flexibilité de mon site pour grapiller des points en plus).

Dans le fichier utils_mysql.php, j'ai notamment la fonction suivante:

function count_elements($query_results){ //This function counts the number of elements returned by a query
$num = mysql_num_rows($query_results) or die(mysql_error());
return $num;
}

Qui compte donc les éléments retournés par une requête MySQL.


Soit le code suivant:

$query2=run_query("SELECT * FROM seance,salle WHERE (seance.numsalle=salle.numsalle AND salle.titre='$movie_sql' and seance.heure>'$time_tosearch') ORDER BY seance.heure ASC LIMIT 1");

$num2=mysql_num_rows($query2);
echo $num2;

if ($num2>0){
[blabla]
} else {
[blabla]
}


Ici, tout marche toujours bien. Par contre, si je remplace mysql_num_rows par count_elements (ce que je veux faire), si la requête retourne 0 éléments, j'ai un beau:

XML Parsing Error: no element found


(si y'en a plus de 0, ça marche).


J'imagine donc qu'il doit y'avoir un bug dans mon fonction count_elements, mais je ne vois pas.

Quelqu'un pourrait-il m'aider ? Merci d'avance wink


Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

2

c'est pas le code dans le if? parce que mysql et xml, ça fait 2 normalement...

3

Je ne pense pas - en bidouillant un peu, j'ai réussi à le faire marcher - ma fonction count_elements ressemble maintenant tout simplement à ça : hehe

function count_elements($query_results){ //This function counts the number of elements returned by a query
return mysql_num_rows($query_results);
}


Par contre je comprends pas pourquoi ça ne marchait pas avec l'ancienne...

Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

4

Ça ne répond pas à ton problème (enfin pas directement), mais tu devrais peut-être te pencher sur des solutions d'abstraction vis à vis des SGBD plutôt que de recoder ton petit système équivalent, non ? Avec une bibliothèque dans le genre de AdoDB (il y en a d'autres mais je n'ai utilisé que celle-là), tu peux faire ton site sans te soucier de ce qu'il y a derrière, et être compatible avec MySQL, PgSQL, Oracle, etc
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

(parfois, quand on veut aller vite, vaut mieux écrire 3 fonctions de 2 lignes chacunes plutot que de se mettre a un framework, surtout quand la correspondance est quasi directe et qu'on a pas besoin de features complexes hehe

6

question de compatibilité future, c'est quand même plus mieux de prendre un framework je trouve.
Par contre après ça dépend aussi des contraintes imposées par l'école vu que c'est un projet scolaire.

7

Mouais, sauf que tel qu'il est parti il veut faire exactement ce que fait adodb, mais en moins bien (le "count_elements" qui prend un handle en paramètre, c'est pas forcément super générique). Comme ce framework est vraiment très simple à utiliser (une init où il faut préciser le driver SQL à utiliser, puis en gros ça s'utilise pareil que n'importe quel sgbd), il me semble que ça vaut le coup.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

Le projet est à rendre pour dans ~1 semaine, et il me reste pas mal de trucs à faire, donc j'ai pas vraiment le temps de me pencher sur un framework - surtout que le site au final doit tourner sur les serveurs de l'IUT, et je ne sais pas si il y'a moyen de faire marcher AdoDB.

Pis bon, ma petite solution marchait bien pour le peu qu'il m'était demandé, juste cette histoire avec le count qui merdouillait, mais j'aimerais quand même savoir quelle est la différence entre mes deux trucs (pour rappelsmile

Ce qui ne marchait pas:


function count_elements($query_results){ //This function counts the number of elements returned by a query 
$num = mysql_num_rows($query_results) or die(mysql_error()); 
return $num; 
} 




Ce qui marche:



function count_elements($query_results){ //This function counts the number of elements returned by a query 
return mysql_num_rows($query_results); 
} 
Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

9

ben a priori c'est le or die. Si num_rows renvoie 0 , je pense que le die s'exécute.
j'aurais plutot fait:

function count_elements($query_results){ //This function counts the number of elements returned by a query  
$num = mysql_num_rows($query_results);
if($num===false)  die(mysql_error());  
return $num;  
}


pourquoi? parce que http://fr.php.net/manual/fr/function.mysql-num-rows.php

et il faut vérifier avec un triple égale pour vérifier valeur ET type, sinon $num==false s'exécutera si $num=0 à cause de la conversion auto de types.

10

ceci dit ça n'explique pas le message "XML Parsing Error" ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

J'utilise le $num dans des requêtes après, c'est peut être seulement à l'exécution de ces requêtes que ça plante ?

(thx squalyl happy )
Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!

12

oui, vu qu'on a pas de debugger pratique, il faudrait voir avec des echo "plop"; bien placés à quel moment l'erreur pète.

13

pour débugger il y a aussi var_dump qui est bien pratique (par contre pour avoir un affichage lisible dans une page html, comme ça écrit directement sur la page au lieu de renvoyer une chaine, il faut utiliser ob_start et compagnie)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

14

15

Avec la fonction qui ne marchait pas, quand je faisais un var_dump($num) j'avais int(2).

Je testerais tout ça plus en détails en rentrant ce soir.
Trout are freshwater fish and have under water weapons.
Trout are very valuable and immensely powerful.
Keep away from the trout.
Why should it mean that the fish in the sea are all unable to sing? Fish fish fish fish fish.
I wish that I could get my hands on a dozen fish!