J'ai écrit une fonction qui est censée renvoyer le nombre de lignes trouvées dans une requête SELECT mais elle semble toujours renvoyer 0 ou un tableau. Je joue avec ça depuis environ une heure maintenant et je ne peux toujours pas le comprendre! Je suis sûr que je fais quelque chose de stupidement mauvais.
La table MySQL
+--------+-------------+---------------------+
| postid | ip | time |
+--------+-------------+---------------------+
| 1234 | 192.168.0.1 | 2014-01-29 14:27:02 |
| 5678 | 192.168.0.2 | 2014-01-29 14:27:02 |
+--------+-------------+---------------------+
PHP
### Search for IP in database
function postviews_get_ip($id, $ip) {
global $post, $wpdb;
$wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = $ip");
$rowcount = $wpdb->num_rows;
return $rowcount;
}
postviews_get_ip($id, $_SERVER['REMOTE_ADDR']);
//both $id and $_SERVER['REMOTE_ADDR']) return the values I'm searching for in the database
Réponses:
Si vous essayez simplement d'obtenir un compte, l'
$wpdb->get_var();
utilisationCOUNT()
de votre sql sera meilleure:Quant à ce qui n'a pas fonctionné dans votre exemple précédent, vous n'assigniez pas votre
$wpdb->get_results()
instance à une variable, et sans elle$wpdb->num_rows;
va simplement retourner zéro car elle ne tire pas réellement de l'instance de la requête, mais plutôt le $ wbdb global objet.Si vous souhaitez utiliser
get_results()
:Mais je ne verrais pas la nécessité de cela à moins que vous n'ayez besoin des résultats, auquel cas je retournerais simplement l'
$ipquery
objet et l'utiliseraisnum_rows
quand j'en aurais besoin:la source
Semble que la requête est incorrecte.
$ip
est une chaîne, vous devez donc mettre un guillemet simple comme ci-dessousla source