चयनित क्वेरी से मिली पंक्तियों की संख्या कैसे लौटाएं


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 |
+--------+-------------+---------------------+

पीएचपी

### 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 तालिका का नाम wp_postviews_ips है, मुझे यकीन नहीं है कि आपका मतलब तालिका उपसर्ग से है।
Swen

$ Wpdb-> wp_postviews_ips से "$ wpdb->" को हटाकर ट्रिक करने के लिए लग रहा था!
स्वेन

यही कारण है कि मैंने तालिका नाम और उपसर्ग के लिए कहा था। सभी वर्डप्रेस टेबल में एक उपसर्ग होता है जिसे आप वर्डप्रेस साइट को सेट करने के दौरान सेट करते हैं। यहाँ कोडेक्स पर अधिक विवरण दिए गए हैं कृपया तालिका नाम के सही उपयोग के साथ मेरे अपडेट किए गए उत्तर की जांच करें।
चितरंजन

जवाबों:


27

यदि आप केवल एक गिनती प्राप्त करने की कोशिश कर रहे हैं, तो अपने वर्ग में $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;

1
छोटा जोड़। एसक्यूएल इंजेक्शन को रोकने के लिए किसी भी प्रश्न का निष्पादन करते समय आपको हमेशा तैयार ( developer.wordpress.org/reference/classes/wpdb/prepare ) का उपयोग करना चाहिए ।
मैकीज पप्रोकी

वास्तव में यह एक छोटा जोड़ नहीं होना चाहिए, यह बहुत महत्वपूर्ण है कि आप अपने कोड को sql इंजेक्शन के माध्यम से शोषक न बनाएं।
मैक्स कैरोल

2

लगता है कि क्वेरी गलत है। $ipस्ट्रिंग है इसलिए आपको नीचे के रूप में एक ही उद्धरण डालना चाहिए

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

इस की कोशिश की और यह अभी भी 0.
स्वेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.