requête SQL avec clause in et variable de type '%s'

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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

Forum : 
Version de Drupal : 

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 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:

<?php
$oids
= array_filter(array_map('trim', explode(',', $oids_as_a_string)));
?>

Si je fais ceci

<?php
foreach($mes_oid as $loid){
   print
$loid." ";
}

//req pour recuperer nom des attributs obtenus avec tri par poids
$req3='SELECT DISTINCT oid, name FROM {uc_attribute_options} WHERE oid IN (' . db_placeholders($mes_oid, 'int') . ') ORDER BY weight ASC';
print
$req3;
$myresult3=db_query('SELECT DISTINCT oid, name FROM {uc_attribute_options} WHERE oid IN (' . db_placeholders($mes_oid, 'int') . ') ORDER BY weight ASC', $mes_oid);

//affichage des tailles
?>

ç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?