我编写了一个函数,该函数应该返回在SELECT查询中找到的行数,但它似乎总是返回0或数组。我已经把这个弄乱了大约一个小时,但我仍然无法弄清楚!我确定我做错了什么愚蠢的事情。

MySQL表



评论

表的名称和表前缀是什么?

@Chittaranjan表名称是wp_postviews_ips,但是我不确定您用表前缀表示什么。

从$ wpdb-> wp_postviews_ips中删除“ $ wpdb->”似乎可以解决问题!

这就是我要求输入表名和前缀的原因。所有wordpress表都有一个前缀,您可以在设置wordpress网站时设置该前缀。这是有关法典的更多详细信息,请正确使用表名来检查我更新的答案。

#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