如何从SELECT查询返回找到的行数

时间:2014-01-29 作者:Swen

我编写了一个函数,该函数应该返回SELECT查询中找到的行数,但它似乎总是返回0或数组。我已经胡闹了大约一个小时了,我还是想不出来!我肯定我做错了什么愚蠢的事。

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

2 个回复
最合适的回答,由SO网友:eteich 整理而成

如果你只是想数一数,$wpdb->get_var(); 以及使用COUNT() 在您的sql中会更好:

### 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
关于上一个示例中出现的错误,您没有指定$wpdb->get_results() 实例,而不使用它$wpdb->num_rows; 将返回零,因为它实际上不是从查询实例中提取,而是从全局$wbdb对象中提取。

如果您确实想使用get_results():

### 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
但我认为没有必要这样做,除非你需要结果,在这种情况下,我只会返回$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\'");
    return $ipquery;
}

$someVariable = postviews_get_ip($id, $_SERVER[\'REMOTE_ADDR\']);
//both $id and $_SERVER[\'REMOTE_ADDR\']) return the values I\'m searching for in the database

echo $someVariable->num_rows;

SO网友:Chittaranjan

似乎查询错误。$ip 是字符串,所以您应该在其周围加上单引号,如下所示

$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = \'$ip\'");

结束

相关推荐

在主题激活前检查php版本

我有一个需要php 5.3以上版本的主题。如果较旧,则会发生致命错误。所以,当用户尝试激活这个主题时,我需要做的是在进入主题代码之前检查php版本,然后,如果php版本太旧,显示一些消息和don\'t 激活我的主题,但保留以前活动的主题有可能吗?我有这个代码来检查版本define(\"THEME_REQUIRED_PHP_VERSION\", \'5.3.0\'); define(\"THEME_IGNORE_PHP_VERSION\", 0); //check