Submitted by selinav on
Bonjour,
J'ai créé une requête qui doit m'afficher les tailles disponibles pour mes articles dans ubercart.
Pour ceci, je récupère les identifiants de mes options d'attributs dans un chaîne de type
$mes_oid='23, 25, 22, 30';
après je faire une requête pour récupérer le nom des mes attributs classés par poids.
Le problème vient de la syntaxe utilisée, ça fonctionne mais ça me retourne un message d'erreur.
Voilà ma requête qui fonctionne mais me retourne une erreur car je passe la valeur %s sans les quotes.
$req3="SELECT distinct oid, name FROM {uc_attribute_options} WHERE oid in (%s) ORDER BY weight ASC";
$myresult3=db_query($req3, $mes_oid);
// exécute du code semblable à
// SELECT distinct oid, name FROM {uc_attribute_options} WHERE oid in (23, 25, 22, 30) ORDER BY weight ASC
Si je fais ceci, ça me retourne uniquement une valeur car les quotes sont bloquantes.
$req3="SELECT distinct oid, name FROM {uc_attribute_options} WHERE oid in ('%s') ORDER BY weight ASC";
$myresult3=db_query($req3, $mes_oid);
// exécute du code semblable à
// SELECT distinct oid, name FROM {uc_attribute_options} WHERE oid in ('23, 25, 22, 30') ORDER BY weight ASC
Comment puis-je faire pour occulter le message d'erreur?
Merci d'avance
<?php$oids = array(23, 25,
Permalien Soumis par Damien Tournoud le 26 Mai, 2010 - 15:57
merci pour ton aide hélas ça
Permalien Soumis par selinav le 26 Mai, 2010 - 16:47
merci pour ton aide hélas ça ne fonctionne pas, ça me retourne le message d'erreur suivant :
warning: array_fill() [function.array-fill]: Number of elements must be positive in /homez.335/lavoila/www/includes/database.inc on line 253.
warning: implode() [function.implode]: Invalid arguments passed in /homez.335/lavoila/www/includes/database.inc on line 253.
user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY weight ASC' at line 1 query: eval /* admin : eval */ SELECT DISTINCT oid, name FROM uc_attribute_options WHERE oid IN () ORDER BY weight ASC in /homez.335/lavoila/www/sites/all/modules/views_customfield/includes/views_customfield_handler_field_phpcode.inc(118) : eval()'d code on line 30.
warning: array_fill() [function.array-fill]: Number of elements must be positive in /homez.335/lavoila/www/includes/database.inc on line 253.
Dois-je patcher mon fichier comme indiqué sur http://drupal.org/node/167649
Il faut que $oids soit un
Permalien Soumis par Damien Tournoud le 26 Mai, 2010 - 16:52
Il faut que $oids soit un tableau, sinon ca ne marchera pas :)
Au pire, si tu récupères vraiment une liste séparée par des virgules dans une chaine, tu peux faire:
merci, c'est ce que j'étais
Permalien Soumis par selinav le 26 Mai, 2010 - 17:13
merci, c'est ce que j'étais en train de regarder sur http://api.drupal.org/api/function/db_placeholders/6
Même en convertissant en tableau j'ai toujours le message, je vérifie mon code il doit y avoir des erreurs.
Si je fais
Permalien Soumis par selinav le 26 Mai, 2010 - 17:55
Si je fais ceci
ça me retourne cela
7 9 11 15 16 17 SELECT DISTINCT oid, name FROM {uc_attribute_options} WHERE oid IN (%d,%d,%d,%d,%d,%d) ORDER BY weight ASC36 | 40 | 44 | 46/48 | 50/52
54/56
donc j'ai bien ce que je veux mais j'ai toujours le message d'erreur
warning: array_fill() [function.array-fill]: Number of elements must be positive in /homez.335/lavoila/www/includes/database.inc on line 253.
warning: implode() [function.implode]: Invalid arguments passed in /homez.335/lavoila/www/includes/database.inc on line 253.
warning: array_fill() [function.array-fill]: Number of elements must be positive in /homez.335/lavoila/www/includes/database.inc on line 253.
warning: implode() [function.implode]: Invalid arguments passed in /homez.335/lavoila/www/includes/database.inc on line 253.
user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY weight ASC' at line 1 query: eval /* admin : eval */ SELECT DISTINCT oid, name FROM uc_attribute_options WHERE oid IN () ORDER BY weight ASC in /homez.335/lavoila/www/sites/all/modules/views_customfield/includes/views_customfield_handler_field_phpcode.inc(118) : eval()'d code on line 36.
moi pas comprendre
EDIT -----------------------
Je place ce code dans views via custom field php est-ce que ça pourrais jouer?
Le plus probable c'est que ce
Permalien Soumis par Damien Tournoud le 26 Mai, 2010 - 18:11
Le plus probable c'est que ce code est exécuté plusieurs fois (par exemple: à chaque ligne), et que à certaines occasions $mes_oid est vide.
Entoure le code d'un
if (!empty($mes_oid)) { }
, ca devrait résoudre le problème.merci ça fonctionne. Parfois
Permalien Soumis par selinav le 27 Mai, 2010 - 08:52
merci ça fonctionne.
Parfois je manque d'un brin de logique, c'est normal si on fait une requête vide...
Encore merci pour la fonction db_placeholders, l'API est tellement vaste qu'il est dur de tout connaître.