SELECT 쿼리에서 찾은 행 수를 반환하는 방법


15

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

테이블 이름과 테이블 접두사는 무엇입니까?
Chittaranjan

@Chittaranjan 테이블 이름은 wp_postviews_ips입니다.하지만 테이블 접두사가 무엇을 의미하는지 잘 모르겠습니다.
Swen

$ wpdb-> wp_postviews_ips에서 "$ wpdb->"를 제거하면 트릭을 수행하는 것 같습니다!
Swen

그것이 내가 테이블 이름과 접두사를 요구 한 이유입니다. 모든 워드 프레스 테이블에는 워드 프레스 사이트를 설정하는 동안 설정 한 접두사가 있습니다. 코덱 에 대한 자세한 내용은 다음 표 이름을 올바르게 사용하여 업데이트 된 답변을 확인하십시오.
Chittaranjan

답변:


27

단순히 카운트를 얻으려고하면 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이므로 0을 반환하지 않습니다. 목적.

사용하려는 경우 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;

1
작은 추가. SQL 삽입을 방지하기 위해 쿼리를 실행할 때는 항상 준비 ( developer.wordpress.org/reference/classes/wpdb/prepare )를 사용해야 합니다.
Maciej Paprocki

실제로 이것은 작은 추가 일이 아니어야합니다 .SQL 삽입을 통해 코드를 악용 할 수 없도록하는 것이 중요합니다.
Max Carroll

2

쿼리가 잘못된 것 같습니다. $ip문자열이므로 아래에 작은 따옴표를 넣어야합니다.

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

이것을 시도하고 여전히 0을 반환합니다.
Swen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.