Mysqli
Résolu/Fermé
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
-
11 oct. 2009 à 20:44
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 15 oct. 2009 à 16:02
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 15 oct. 2009 à 16:02
A voir également:
- Mysqli::real_connect(): (hy000/2002): aucune connexion n'a pu être établie car l’ordinateur cible l’a expressément refusée
- Gmail connexion - Guide
- Ordinateur qui rame - Guide
- Réinitialiser ordinateur - Guide
- D'où peut venir un problème de connexion internet sur un ordinateur ? - Guide
- Nous n'avons pas pu nous connecter a ce réseau - Forum Windows 10
6 réponses
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
11 oct. 2009 à 20:57
11 oct. 2009 à 20:57
Je comprend pas trop pourquoi tu parles de foreach alors que $request est une chaine.
mysql_query, mysqli::query n'accepte pas les requetes multiples en argument.
mysql_query, mysqli::query n'accepte pas les requetes multiples en argument.
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
11 oct. 2009 à 22:42
11 oct. 2009 à 22:42
parce que request n'est qu'une partie de mon code traité par la boucle foreach.
De plus, je suis au courant pour les requêtes multiples, et multi_query s'en occupe assez bien^^.
Mysql prend en charge les requêtes multiples, mais il faut changer un flag à la connexion et c'est plutôt foireux comme gestion^^.
De plus, je suis au courant pour les requêtes multiples, et multi_query s'en occupe assez bien^^.
Mysql prend en charge les requêtes multiples, mais il faut changer un flag à la connexion et c'est plutôt foireux comme gestion^^.
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
12 oct. 2009 à 18:56
12 oct. 2009 à 18:56
Désolé, je comprend pas où se situe ton problème.
Tu peux montrer ce foreach, et ton utilisation de mysqli ?
Et l'erreur que retourne mysql est laquelle ?
Tu peux montrer ce foreach, et ton utilisation de mysqli ?
Et l'erreur que retourne mysql est laquelle ?
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
12 oct. 2009 à 19:18
12 oct. 2009 à 19:18
mysqli ne retourne pas d'erreur, il se contente juste de rater son truc passer une itération :s
Voici ma boucle, je l'ai simplifiée depuis:
j'ai également arrêté de faire ma query dans la boucle foreach: en concaténant mes instructions avant de les envoyer une seule fois (au lieu de toutes les envoyer dès qu'elles sont prêtes), je me suis rendu compte que le problème disparaissait. Je ne comprends absolument pas pourquoi, mais bon, tant que ça fonctionne... Je reste sur l'idée que mes requêtes laissaient des traces.
A propos, je programme en POO mes fonctions, y'a pas un moyen de faire en sorte que l'objet $mysqli soit accessible partout sans avoir à le recréer à chaque fois?
Voici ma boucle, je l'ai simplifiée depuis:
$mysqli=new mysqli('mysql2.celeonet.fr','jophan','mensonge1','jophan_v2'); if( $images=$_FILES ): foreach($images as $id=>$image){ list($refi1,$refi2,$i1,$i2)=$this->prepareImage($id,$image); if( is_int($id) and strlen($refi1)==10 and strlen($refi2)==10 and strlen($i1)==14 and strlen($i2)==14 ): $request.="set @where='".REFERER."'; "; $request.="set @newpos=(select ifnull(max(position)+1,1) from images i inner join cat_images ci on ci.ref_sCat=@where and ci.ref_image=i.ref_image); "; $request.="insert into images "; $request.="values ('$refi2','$i1','$i2',@newpos); "; $request.="insert into cat_images "; $request.="values ('$refi2',@where);"; elseif( strlen($i1)==14 and strlen($i2)==14 ): $request="update sCat_config set outFocus='$i1', onFocus='$i2' where ref_cat='".REFERER."' limit 1"; endif; } if(strlen($request)!=0) $mysqli->multi_query($request) or die(__file__.' erreur '.__line__."<br />$request"); endif;
j'ai également arrêté de faire ma query dans la boucle foreach: en concaténant mes instructions avant de les envoyer une seule fois (au lieu de toutes les envoyer dès qu'elles sont prêtes), je me suis rendu compte que le problème disparaissait. Je ne comprends absolument pas pourquoi, mais bon, tant que ça fonctionne... Je reste sur l'idée que mes requêtes laissaient des traces.
A propos, je programme en POO mes fonctions, y'a pas un moyen de faire en sorte que l'objet $mysqli soit accessible partout sans avoir à le recréer à chaque fois?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
P@t@ch0n
Messages postés
565
Date d'inscription
mercredi 15 avril 2009
Statut
Membre
Dernière intervention
28 décembre 2009
85
15 oct. 2009 à 10:09
15 oct. 2009 à 10:09
Comme j'ai toujours pas saisi le problème, je sais pas.
Et vu que je n'utilise jamais mysqli...
Sinon, tes requêtes me semble déjà incohérentes.
set @where='".REFERER."
Pourquoi initialiser une variable avec cette valeur ?
Je ne comprend pas trop l'intérêt, autant passer directement cette valeur dans la requête en ayant besoin.
set @newpos=(select ifnull(max(position)+1,1) from images i inner join cat_images ci on ci.ref_sCat=@where and ci.ref_image=i.ref_image);
Là, pareil, si la valeur de @newpos n'est pas d'une importance capitale (elle ne peut l'être en utilisant un max qui ne garanti pas l'unicité de la nouvelle valeur), autant exécuter cette requête une seule fois et d'incrémenter la variable à chaque fois (@newpos:=@newpos+1), ou même carrément utiliser une variable php.
« A propos, je programme en POO mes fonctions, y'a pas un moyen de faire en sorte que l'objet $mysqli soit accessible partout sans avoir à le recréer à chaque fois? »
Tu seras toujours obligé de créer ton objet, après tu pourrais peut-être faire une classe héritant de mysqli de façon à ne créer qu'une unique connexion à mysql (accès par singleton), c'est même préférable.
Et vu que je n'utilise jamais mysqli...
Sinon, tes requêtes me semble déjà incohérentes.
set @where='".REFERER."
Pourquoi initialiser une variable avec cette valeur ?
Je ne comprend pas trop l'intérêt, autant passer directement cette valeur dans la requête en ayant besoin.
set @newpos=(select ifnull(max(position)+1,1) from images i inner join cat_images ci on ci.ref_sCat=@where and ci.ref_image=i.ref_image);
Là, pareil, si la valeur de @newpos n'est pas d'une importance capitale (elle ne peut l'être en utilisant un max qui ne garanti pas l'unicité de la nouvelle valeur), autant exécuter cette requête une seule fois et d'incrémenter la variable à chaque fois (@newpos:=@newpos+1), ou même carrément utiliser une variable php.
« A propos, je programme en POO mes fonctions, y'a pas un moyen de faire en sorte que l'objet $mysqli soit accessible partout sans avoir à le recréer à chaque fois? »
Tu seras toujours obligé de créer ton objet, après tu pourrais peut-être faire une classe héritant de mysqli de façon à ne créer qu'une unique connexion à mysql (accès par singleton), c'est même préférable.
Smoking bird
Messages postés
870
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
10 juillet 2011
58
15 oct. 2009 à 16:02
15 oct. 2009 à 16:02
Pour le where, uniquement parce que je voulais travailler un peu avec les variables mysql :D :)
Pour newpos, si, c'est d'une importance capitale. J'ajouterais que mon max passe sur une jointure où les valeurs de position sont uniques dans la mesure où elles sont liées par une autre table, donc ça me semble ne pas être une si mauvaise idée que ça. Cela dit, je prends ta remarque en compte, j'avais pas du tout envisagé cette façon de faire (incrémenter la variable @newpos), je me pencherais très probablement sur la question.
Pour le singleton, ça m'a l'air assez intéressant :) je me renseignerais dessus.
Merci pour ta participation en tous cas, très utile^^. J'ai terminé mon projet, je mets donc ce sujet en résolu. Pas entièrement satisfait, mais dans les faits, c'est amplement suffisant. Je ferais mieux la prochaine fois :p. Cela dit, je note d'un point de vue personnel que mysqli est plus délicat à utiliser qu'il n'y paraît, j'me retrouve avec des bugs qui ne se répètent pas toujours, donc très difficiles à traquer. J'me demande bien si je vais continuer là dessus ^o).
Merci encore et à bientôt on CCM^^
Smoke
Pour newpos, si, c'est d'une importance capitale. J'ajouterais que mon max passe sur une jointure où les valeurs de position sont uniques dans la mesure où elles sont liées par une autre table, donc ça me semble ne pas être une si mauvaise idée que ça. Cela dit, je prends ta remarque en compte, j'avais pas du tout envisagé cette façon de faire (incrémenter la variable @newpos), je me pencherais très probablement sur la question.
Pour le singleton, ça m'a l'air assez intéressant :) je me renseignerais dessus.
Merci pour ta participation en tous cas, très utile^^. J'ai terminé mon projet, je mets donc ce sujet en résolu. Pas entièrement satisfait, mais dans les faits, c'est amplement suffisant. Je ferais mieux la prochaine fois :p. Cela dit, je note d'un point de vue personnel que mysqli est plus délicat à utiliser qu'il n'y paraît, j'me retrouve avec des bugs qui ne se répètent pas toujours, donc très difficiles à traquer. J'me demande bien si je vais continuer là dessus ^o).
Merci encore et à bientôt on CCM^^
Smoke