पीडीओ अंतिम आईडी डालें


158

मेरे पास एक क्वेरी है, और मैं अंतिम आईडी सम्मिलित करना चाहता हूं। फ़ील्ड आईडी प्राथमिक कुंजी और ऑटो वेतन वृद्धि है।

मुझे पता है कि मुझे इस कथन का उपयोग करना है:

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

ऐसा इसलिए है क्योंकि यह एक SQL फ़ंक्शन है, PHP नहीं। आप उपयोग कर सकते हैं PDO::lastInsertId()

पसंद:

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

यदि आप इसे PDO API के बजाय SQL के साथ करना चाहते हैं, तो आप इसे सामान्य चयन क्वेरी की तरह करेंगे:

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

1
हाँ तुम सही हो, मैंने इसे पाया और यह काम करता है, धन्यवाद, मैं जवाब स्वीकार करूंगा
विलियम किना

7
@ rybo111, पहले Screaming snake case। दूसरा, यह MySQL नामकरण सम्मेलन है और PHP नहीं है
azerafati

2
@ rybo111, हम्म SELECT LAST_INSERT_ID()एक MySQL फ़ंक्शन है
azerafati

32
तो शायद यह एक गूंगा अनुवर्ती सवाल है, लेकिन मैं सिर्फ निश्चित होना चाहता हूं। जब मैं lastInsertId () पर भरोसा करता हूं तो क्या यह अंतिम सम्मिलित आईडी वापस कर देता है जो मेरे वर्तमान में कोड को निष्पादित करने के दौरान हुआ था? या क्या यह मेरे डेटाबेस से अंतिम सम्मिलित आईडी लौटाता है? उदाहरण के लिए, यदि मेरे पास बहुत अधिक ट्रैफ़िक वेबसाइट है और मैं अपनी लॉगिन स्क्रिप्ट के दौरान कुछ सम्मिलित करता हूं और सम्मिलित किए गए iD को प्राप्त करने के लिए lastInsertId () का उपयोग करता हूं, लेकिन बहुत सारे लोग एक ही समय में लॉग इन कर रहे हैं, क्या मैं lastInsertId पर भरोसा करने पर सुरक्षित हूं ( ) कोड निष्पादन के उस विशिष्ट उदाहरण से अंतिम सम्मिलित आईडी प्राप्त करने के लिए? या मैं एक खतरा है
कला Geigel

41
@ArtGeigel यह PDO उदाहरण के लिए अंतर्निहित कनेक्शन की अंतिम सम्मिलित आईडी होगी। दूसरे शब्दों में, यह आपके द्वारा वर्णित परिदृश्य में सुरक्षित है क्योंकि समवर्ती प्रश्न अलग-अलग कनेक्शन में होंगे।
कॉर्बिन

15

lastInsertId () केवल INSERT क्वेरी के बाद काम करते हैं।

सही बात:

$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

आप कनेक्शन ऑब्जेक्ट ($ कॉन) पर lastInsertId () विधि चलाकर अंतिम लेनदेन की आईडी प्राप्त कर सकते हैं।

जैसे यह $ लिड = $ कॉन-> lastInsertId ();

कृपया डॉक्स की जाँच करें https://www.php.net/manual/en/language.oop5.basic.php


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