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
単にカウントを取得しようとしているだけの場合は、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;
クエリが間違っているようです。 $ip
は文字列なので、以下のようにそれを一重引用符で囲む必要があります。
$wpdb->get_results("SELECT * FROM {$wpdb->prefix}postviews_ips WHERE postid = $id AND ip = '$ip'");