2010-09-16 5 views
2

i essayer de chercher un résultat à cette demande, qui travaille dans phpayadmin:Problèmes avec la base de données de requêtes drupal

$result_med = db_query("SELECT node.nid AS nid, 
    node.created AS node_created 
FROM dr_wiwe_node node 
LEFT JOIN dr_wiwe_content_type_classified node_data_field_classified_valid_till ON node.vid = node_data_field_classified_valid_till.vid 
WHERE ((node.type in ('classified')) AND (node.status <> 0)) 
    AND (DATE_FORMAT(STR_TO_DATE(node_data_field_classified_valid_till.field_classified_valid_till_value, '%Y-%m-%dT%T'), '%Y-%m-%d\T%H:%i:%s') >= '2010-09-16T22:34:05') 
    ORDER BY node_created DESC LIMIT 1"); 
    var_dump($result_med); 
    while ($node = db_fetch_object($result_med)) { 
    //var_dump ($node);} 

Dans la version hardcoded php il ne retourne rien. Si je var_dump $ result_med, je reçois: ressource (552) de type (résultat mysql)

Où est mon erreur?

+0

Essayez ce sql dans les outils de requête (comme phpmyadmin). Je suppose que votre requête ne trouve rien. Prêtez l'attention à vos conversations de date, les outils de sql vous aident ... – Nikit

+0

J'ai déjà écrit dans la première ligne, cela fonctionne dans phpmyadmin. – Cindy

+0

'db_query' renvoie une ressource de résultat, de sorte que la sortie' var_dump ($ result_med) 'semble correcte. Vous récupérerez plus tard le contenu réel de cette ressource, comme dans la boucle while partielle de l'exemple. Pourquoi le 'var_dump ($ node)' est-il commenté, et que montre-t-il si vous le décommentez? –

Répondre

4

Le problème est probablement dû à db_query() traitant des parties de vos chaînes de formatage datetime comme des paramètres de requête, qu'il essaie de remplacer.

Vous aurez donc besoin d'ajouter des caractères '%' supplémentaires à ceux qui vous sont déjà présents pour leur échapper, empêchant ainsi le processus de substitution de paramètres d'essayer de les remplacer.

Voir le "If a query that has % in them" comment à partir de la documentation de l'API db_query pour un exemple. Une solution plus propre/plus lisible consisterait simplement à utiliser des espaces réservés '% s' pour les chaînes de formatage dans la requête, puis à ajouter les chaînes de formatage réelles en tant qu'arguments à l'appel db_query, comme suggéré par Eli.

+0

hmmm ... Je l'ai changé pour ceci: '(DATE_FORMAT (STR_TO_DATE (node_data_field_classified_valid_till.field_classified_valid_till_value, '%% Y - %% m-% dT %% T'), '%% Y-% m-% d \ T %% i: %% s ')> =' 2010-09-16T22: 34: 05 ') ' – Cindy

+0

Mais je n'ai toujours pas de résultat – Cindy

+1

ooops ... j'ai oublié des procents ... maintenant ça marche! Cool.Many Merci. – Cindy

Questions connexes