2010-11-18 12 views
0

Dans Wordpress, je suis en train d'ajouter l'ID de poste des postes que je publie dans une nouvelle table si pas déjà (pour éviter les doubles entrées lors de la mise à jour les messages du panneau d'administration)instruction if ne fonctionne pas

if($wpdb->get_row("SELECT post_id FROM wp_post_votes WHERE post_id != $post_ID")) { 
    $wpdb->insert($wpdb->prefix . 'post_votes', array('post_id' => $post_ID)); 
    } 

Cette instruction ne fonctionne qu'avec un opérateur = et un "else (do code ..}". Avec! = Rien ne se passe je n'arrive pas à comprendre pourquoi .. Je veux juste garder le code aussi court que possible

+0

Avez-vous essayé de regarder ce '$ wpdb-> get_row (...)' retourne? – zerkms

Répondre

0
if(!($wpdb->get_row("SELECT post_id FROM wp_post_votes WHERE post_id = $post_ID"))) { 
    $wpdb->insert($wpdb->prefix . 'post_votes', array('post_id' => $post_ID)); 
} 

Devrait être ce que vous cherchez. (Ajout d'un! Avant le test pour simuler votre effet « else »)

+0

Ahh ça a du sens, merci! Recommandez-vous que j'ajoute aussi end(); ou exit() ? l'instruction est dans une fonction avec return $ somevariable après la fermeture if bracket. – MegaRambo

+0

Je ne connais pas le reste du flux de votre application, donc je ne suis pas sûr. Essayez-le et voyez s'il se casse. Vous n'aurez peut-être pas besoin des quelques cycles de temps processeur supplémentaires s'il y a une chance que juste exit() provoque des problèmes. – Tim

+0

ah je vois, va faire! Merci encore! :-) – MegaRambo

0

Essayez

if(!$wpdb->get_row("SELECT post_id FROM wp_post_votes WHERE post_id = $post_ID") 
+0

Merci! C'est la bonne réponse! – MegaRambo

0

Votre instruction if vérifie que la sortie de

$wpdb->get_row("SELECT post_id FROM wp_post_votes WHERE post_id != $post_ID") 

évalue à une valeur réelle semblable. Vous exécutez essentiellement une requête qui sélectionne tous les ID de toutes les lignes (sauf peut-être un). C'est inefficace et probablement pas ce que vous vouliez - vous vouliez probablement vérifier si une ligne correspondante n'était pas trouvée, pas que des lignes non-assorties étaient trouvées.

Vous voulez probablement:

if (!$wpdb->get_row("SELECT post_id FROM wp_post_votes WHERE post_id = $post_ID")) { 
+0

Merci! C'est la bonne réponse! – MegaRambo