PDO শেষ আইডি inোকান


158

আমার একটি প্রশ্ন রয়েছে এবং আমি সর্বশেষ আইডি getোকাতে চাই। ফিল্ড আইডি হ'ল প্রাথমিক কী এবং স্বতঃবৃদ্ধি।

আমি জানি যে আমাকে এই বিবৃতিটি ব্যবহার করতে হবে:

LAST_INSERT_ID()

এই বিবৃতিটি এই জাতীয় একটি প্রশ্নের সাথে কাজ করে:

$query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())";

তবে আমি যদি এই বিবৃতিটি ব্যবহার করে আইডি পেতে চাই:

$ID = LAST_INSERT_ID();

আমি এই ত্রুটি পেয়েছি:

Fatal error: Call to undefined function LAST_INSERT_ID()

আমি কি ভুল করছি?

উত্তর:


367

কারণ এটি একটি এসকিউএল ফাংশন, পিএইচপি নয়। আপনি ব্যবহার করতে পারেন PDO::lastInsertId()

ভালো লেগেছে:

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

আপনি যদি পিডিও এপিআই এর পরিবর্তে এসকিউএল দিয়ে এটি করতে চান তবে আপনি এটি একটি সাধারণ নির্বাচিত ক্যোয়ারির মতো করবেন:

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();

1
হ্যাঁ আপনি ঠিক বলেছেন, আমি এটি পেয়েছি এবং এটি কাজ করে, আপনাকে ধন্যবাদ, আমি উত্তর গ্রহণ করব
উইলিয়াম কিনান

7
@ rybo111, প্রথম এটি Screaming snake case। দ্বিতীয়ত, এটি মাইএসকিউএল নামকরণের কনভেনশন এবং পিএইচপি নয়
আজরাফতি

2
@ rybo111, এইচএমএম SELECT LAST_INSERT_ID()একটি মাইএসকিউএল ফাংশন
আজেফরাতি

32
সুতরাং সম্ভবত এটি একটি বোবা ফলোআপ প্রশ্ন তবে আমি কেবল নিশ্চিত হতে চাই। আমি যখন সর্বশেষInsertId () এর উপর নির্ভর করি তখন কি এটি আমার বর্তমানে সম্পাদনকারী কোডের মধ্যে উপস্থিত সর্বশেষ inোকানো আইডিটি ফিরিয়ে দেয়? অথবা এটি আমার ডাটাবেস থেকে সর্বশেষ IDোকানো আইডিটি ফেরত দেয়? উদাহরণস্বরূপ, যদি আমার প্রচুর পাচারের ওয়েবসাইট থাকে এবং আমি আমার লগইন স্ক্রিপ্ট চলাকালীন কিছু andোকাতাম এবং সন্নিবেশিত আইডি পেতে লাস্ট ইনসার্ট আইডি () ব্যবহার করি তবে অনেক লোক একই সাথে লগ ইন করে, আমি কি লাস্টআইনসর্ট আইডি (র উপর নির্ভর করে নিরাপদ)? ) কোডটি কার্যকর করার ক্ষেত্রে নির্দিষ্ট specificোকানো আইডিটি পেতে? বা আমি কি কোনও ঝুঁকি নিয়ে
চলেছি

41
@ আর্টজিগেল এটি পিডিও উদাহরণ অন্তর্নিহিত সংযোগের সর্বশেষ IDোকানো আইডি হবে। অন্য কথায়, আপনি বর্ণিত দৃশ্যে এটি নিরাপদ যেহেতু সমবর্তী প্রশ্নগুলি পৃথক সংযোগে ঘটবে।
কর্বিন

15

সর্বশেষ InsertId () কেবল ইনসার্ট ক্যোয়ারির পরে কাজ করে।

সঠিক:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
                              VALUES(?,?,?);");
$sonuc = $stmt->execute([$username,$email,$pass]);
$LAST_ID = $this->conn->lastInsertId();

ত্রুটিপূর্ণ:

$stmt = $this->conn->prepare("SELECT * FROM users");
$sonuc = $stmt->execute();
$LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0

-5

আপনি সংযোগ বস্তু ($ সংযোগ) এ সর্বশেষ লেনদেনের আইডি পেতে পারেন সর্বশেষ লেনদেনের আইডি I

এটির মতো $ lid = $ conn-> lastInsertId ();

দয়া করে ডক্স https://www.php.net/manual/en/language.oop5.basic.php দেখুন


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