MySQL表
#1 楼
如果您只是想计数,那么在您的sql中使用$wpdb->get_var();
以及在其中使用COUNT()
会更好:没有将您的$wpdb->get_results()
实例分配给变量,没有它,$wpdb->num_rows;
只会返回零,因为它实际上不是从查询实例中拉出,而是全局$ wbdb对象。 >如果您确实想使用get_results()
:### Search for IP in database
function postviews_get_ip($id, $ip) {
global $post, $wpdb;
$rowcount = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'");
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
但是除非您需要结果,否则我认为不需要这样做,在这种情况下,我将只返回
$ipquery
对象并在需要时在其上使用num_rows
:### Search for IP in database
function postviews_get_ip($id, $ip) {
global $post, $wpdb;
$ipquery= $wpdb->get_results("SELECT * FROM $wpdb->wp_postviews_ips WHERE postid = $id AND ip = '$ip'");
$rowcount = $ipquery->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
评论
小加成。在执行任何查询以防止sql注入时,应始终使用prepare(developer.wordpress.org/reference/classes/wpdb/prepare)。
– Maciej Paprocki
19年5月29日在12:35
实际上,这不应该是一个小的补充,这很重要,不要使您的代码可通过sql注入进行利用。
–马克斯·卡罗尔
19年9月12日在21:09
#2 楼
似乎查询是错误的。$ip
是字符串,因此您应该在下面加上单引号$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = '$ip'");
评论
尝试过此方法,但仍返回0。
– Swen
2014年1月29日在16:53
评论
表的名称和表前缀是什么?@Chittaranjan表名称是wp_postviews_ips,但是我不确定您用表前缀表示什么。
从$ wpdb-> wp_postviews_ips中删除“ $ wpdb->”似乎可以解决问题!
这就是我要求输入表名和前缀的原因。所有wordpress表都有一个前缀,您可以在设置wordpress网站时设置该前缀。这是有关法典的更多详细信息,请正确使用表名来检查我更新的答案。