ওয়ার্ডপ্রেস ডাটাবেস থেকে কীভাবে সর্বশেষ rowোকানো সারি আইডি পাবেন?


98

আমার ওয়ার্ডপ্রেস প্লাগইনটির একটি টেবিল রয়েছে যার একটি আইটি নামে আউটপুট ক্রিমেন্ট প্রাথমিক কী ক্ষেত্র রয়েছে। টেবিলটিতে একটি নতুন সারি সন্নিবেশ করা হলে আমি সন্নিবেশটির আইডি মান পেতে চাই।

বৈশিষ্ট্যটি হ'ল ডিজে sertোকানোর জন্য সার্ভারে ডেটা পোস্ট করার জন্য এজেএক্স ব্যবহার করা। নতুন সারির আইডি ক্লায়েন্টের স্থিতি আপডেট করতে AJAX প্রতিক্রিয়াতে ফিরে আসে। এটা সম্ভব যে একাধিক ক্লায়েন্ট একই সাথে সার্ভারে ডেটা পোস্ট করে। সুতরাং, আমাকে নিশ্চিত করতে হবে যে প্রতিটি এজ্যাক অনুরোধের প্রতিক্রিয়ায় ঠিক নতুন সারির আইডি পেয়েছে।

পিএইচপি, একটি পদ্ধতি বলা হয় mysql_insert_id এই feature.But জন্য, এটি জাতি অবস্থার জন্য বৈধ শুধুমাত্র যদি যুক্তি link_identifier গত অপারেশন। ডাটাবেস সহ আমার অপারেশনটি $ wpdb এ চলছে। কিভাবে বের করে আনতে link_identifier $ wpdb থেকে নিশ্চিত mysql_insert_id কাজ করতে? $ Wpdb থেকে শেষ সন্নিবেশ করা সারি আইডি পাওয়ার কোনও অন্য উপায় নেই?

ধন্যবাদ


লিঙ্ক | সংস্থানটি এতে সঞ্চিত আছে $wpdb->dbh, তবে এটি সংজ্ঞায়িত করা হয়েছে protected $dbh;... আপনি সরাসরি এটি অ্যাক্সেস করতে পারবেন না, তাই নীচের উত্তরটি ব্যবহার করুন :)
jave.web

উত্তর:


197

এটি sertোকানোর পরে সরাসরি করুন $wpdb->insert(), এটি করুন:

$lastid = $wpdb->insert_id;

ওয়ার্ডপ্রেস উপায়ে কীভাবে জিনিসগুলি করা যায় সে সম্পর্কে আরও তথ্য ওয়ার্ডপ্রেস কোডেক্সে পাওয়া যাবে। উপরের বিশদটি এখানে ডাব্লুপিডিবি শ্রেণীর পৃষ্ঠায় পাওয়া গেল


এটা এই মত হল: $lastid = $wpdb->$insert_id ?
ফ্রান্সিসকো

"সারিটি beোকানো না পারলে এই ফাংশনটি মিথ্যা প্রত্যাবর্তন করে Otherwise অন্যথায়, এটি প্রভাবিত সারিগুলির সংখ্যা প্রদান করে (যা সর্বদা 1 হবে)"। থেকে: codex.wordpress.org/Function_Reference/wpdb_Class#INSERT_rows
unbreak

4
@ অবিশ্বাস - সেখানে ভুল ফাংশন ... আপনি wpdb-> সন্নিবেশ ($ টেবিল, $ ডেটা, $ ফর্ম্যাট) সম্পর্কে পড়ছেন;
jsnfwlr

4
এটি আরও দরকারী যে আপনি যদি d wpdb-> ক্যোয়ারী ব্যবহার করেন তবে এটি এখনও insert_id বরাদ্দ করবে।
ডেভ স্কটিস

4
প্রয়োজনীয় ছিল না, তবে আমি মনে করি এটি কিছুটা উন্নতি করে, বিবৃতি হাইলাইট করে, এবং একক লাইনের জন্য প্রয়োজনীয় না হওয়ায় ইনডেন্টেশন সরিয়ে দেয়।
কমল পাল

14

এইভাবে আমি এটি করেছি, আমার কোডে

 ...
 global $wpdb;
 $query =  "INSERT INTO... VALUES(...)" ;
 $wpdb->query(
        $wpdb->prepare($query)
);
return $wpdb->insert_id;
...

আরও ক্লাস ভেরিয়েবল


4
"সারিটি beোকানো না পারলে এই ফাংশনটি মিথ্যা প্রত্যাবর্তন করে Otherwise অন্যথায়, এটি প্রভাবিত সারির সংখ্যা প্রদান করে (যা সর্বদা 1 হবে)"। থেকে: codex.wordpress.org/Function_Reference/wpdb_Class#INSERT_rows
unbreak

4
এটা কাজ করে। $wpdb->queryআয় ক্ষতিগ্রস্ত সারির lên এবং $wpdb->insert_idগত সন্নিবেশিত ID রয়েছে। ধন্যবাদ!
ফ্যাবিও মন্টেফুস্কোলো

এটি আমার পক্ষে আরও ভাল, কারণ আমি সন্নিবেশগুলি ক্যাপচার করতে চাই যা অন্যথায় অনন্য কলামে নকল কলাম মানগুলির কারণে ত্রুটি ফিরিয়ে দেয়। কোন উপায় নেই INSERT IGNOREসঙ্গে $wpdb->insertদুর্ভাগ্যবশত।
সলোমন ক্লসন

@ অজানা ব্রেক - দেখে মনে হচ্ছে এটি আমার কাছে ফিরছে insert_id, প্রভাবিত সারিগুলির সংখ্যা নয়।
সলোমন ক্লসন

0

এর মতো কিছু এটি করাও উচিত:

$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;

10
প্রায় একই সময়ে দুটি ভিন্ন ভিন্ন প্রক্রিয়া দ্বারা দুটি রেকর্ড সন্নিবেশ করানো হলে এটি সমস্যার কারণ হবে না? উভয় প্রক্রিয়া একই সময়ে সন্নিবেশ করতে পারে (বা একই সময়ে যথেষ্ট পরিমাণে কাছাকাছি) যাতে অটো_সামগ্রী উভয় প্রক্রিয়ার জন্য একই সংখ্যা ফেরত দেয়।
মাইকেল খলিলি

0

এটি প্রবেশ করানোর পরে আমার শেষ আইডি উপায়টি পাওয়া দরকার

$lastid = $wpdb->insert_id;

বিকল্প ছিল না।

অনুসরণ কি:

global $wpdb;
$id = $wpdb->get_var( 'SELECT id FROM ' . $wpdb->prefix . 'table' . ' ORDER BY id DESC LIMIT 1');

-6

mysql_insert_id()কোনও লেনদেনের ভিতরে কল রাখা , এটি করা উচিত:

mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.

4
এটি ওপিতে উল্লিখিত $ wpdb অবজেক্টটি ব্যবহার করে এটি করছে না।
jsnfwlr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.