web-dev-qa-db-ja.com

SELECTクエリから見つけた行数を返す方法

SELECTクエリで見つかった行数を返すことになっている関数を書きましたが、それは常に0か配列を返すようです。私は今これを約1時間めちゃくちゃにしています、そして私はまだそれを理解することができません!私はばかげて間違ったことをしていると思います。

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
8
Swen

単にカウントを取得しようとしているだけの場合は、SQLで$wpdb->get_var();を使用するのと一緒にCOUNT()を使用するほうが良いでしょう。

### 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;
21
eteich

クエリが間違っているようです。 $ipは文字列なので、以下のようにそれを一重引用符で囲む必要があります。

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