কীভাবে নির্বাচিত ক্যোয়ারী থেকে পাওয়া সারিগুলির সংখ্যা ফিরে আসবে


15

আমি একটি ফাংশন লিখেছি যা একটি SELECT ক্যোয়ারীতে পাওয়া সারিগুলির সংখ্যা ফেরত দেওয়ার কথা বলে মনে হচ্ছে তবে এটি সর্বদা 0 বা একটি অ্যারে ফিরে আসে বলে মনে হয়। আমি এখন প্রায় এক ঘন্টা ধরে এটি নিয়ে ঘোরাঘুরি করছি এবং আমি এখনও এটি বুঝতে পারি না! আমি নিশ্চিত যে আমি বোকামি কিছু ভুল করছি।

মাইএসকিউএল টেবিল

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

টেবিলের নাম এবং টেবিলের উপসর্গ কী?
চিত্তরঞ্জন

@ চিত্তরঞ্জন সারণীর নাম ডাব্লুপি_পোস্টভিউ_ইপ্স, যদিও আপনি টেবিলের উপসর্গটি বলতে চাইছেন তা আমি নিশ্চিত নই।
সোয়েন

$ 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
ছোট সংযোজন। এসকিএল ইনজেকশন রোধ করতে কোনও প্রশ্ন চালানোর সময় আপনার সর্বদা প্রস্তুত ( ডেভেলপার.ওয়ার্ডপ্রেস.অর্গ / রেফারেন্স / স্লাসস / ডাব্লুপিডিবি / প্রিপার) ব্যবহার করা উচিত ।
ম্যাকিয়েজ পাপ্রোকি

আসলে এটি একটি ছোট সংযোজন হওয়া উচিত নয়, এটি আপনার কোডটি এসকেএল ইঞ্জেকশনের মাধ্যমে ব্যবহারযোগ্য না করে তোলা খুব গুরুত্বপূর্ণ।
সর্বাধিক ক্যারল

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.