2012-02-17 15 views
6

मैं पीडीओ में इस त्रुटि मिलती है:पीडीओ के ओरेकल ड्राइवर को अंतिम InsertId() क्यों लागू नहीं किया जाता है?

error: Message: PDO::lastInsertId() [pdo.lastinsertid]: SQLSTATE[IM001]: Driver does not support this function: driver does not support lastInsertId()

जब एक दैवज्ञ डेटाबेस से पिछले डाला आईडी प्राप्त करने की कोशिश। मैंने अनुक्रम स्ट्रिंग को अंतिम सम्मिलित आईडी फ़ंक्शन में जोड़ा लेकिन अभी भी काम नहीं कर रहा है। पीडीओ के साथ ओरेकल पर Google इस त्रुटि के बारे में ज्यादा नहीं कहता है।

+0

क्या आपने इसके बजाय एक क्वेरी के माध्यम से इसे लाने का प्रयास किया है? (मानते हैं कि ओरेकल के लिए एक समारोह है) –

उत्तर

10

ओरेकल में ऑटोइनक्रिकमेंट कॉलम नहीं हैं, इसलिए lastInsertId MySQL के लिए उसी तरह समर्थित नहीं है। आपको ओरेकल अनुक्रमों का उपयोग करके बराबर "हाथ से" लागू करना होगा।

प्रत्येक तालिका के लिए एक ऑरैकल अनुक्रम बनाएं जिसके लिए इसकी आवश्यकता है, और जब भी आपको कोई सम्मिलित करने की आवश्यकता हो, इसे पुनर्प्राप्त करने के लिए NEXTVAL का उपयोग करें, फिर तालिका में डालने पर उस मान का उपयोग करें।

$sh = $conn->prepare('SELECT uid_seq.NEXTVAL AS nextInsertID FROM DUAL'); 
$sh->execute(); 
$nextInsertId = $sh->fetchColumn(0); 

$sh = $conn->prepare("INSERT INTO table (id, data) VALUES(?, 255)"); 
$sh->execute(array($nextInsertId)); 
+0

क्या यह दौड़ की स्थिति सुरक्षित है? (मुझे ओरेकल के बारे में कोई जानकारी नहीं है, केवल उत्सुक है) –

+0

@ पेक्का - नहीं, अनुक्रम संख्या ओरेकल सर्वर द्वारा दौड़ की स्थिति के जोखिम के बिना जारी की जाती है, बढ़ी है और नेक्सटाल के लिए हर अनुरोध पर जारी की गई है ... जैसे MySQLs autoincrement, स्तर को छोड़कर एक टेबल स्तर के बजाय अनुक्रम का। मुझे लगता है कि किसी को उनके साथ अन्य समस्याओं का सामना करना पड़ेगा, और कुछ ऐसे मौलिक मुद्दों में ओरेकल को डेटाबेस के रूप में तोड़ दिया होगा। हालांकि, इस विधि का उपयोग कर आईडी कॉलम में उपयोगकर्ताओं को "कोई पुराना मान" संग्रहीत करने से रोकने के लिए कुछ भी नहीं है। –

+0

मुझे अनुक्रम में अगले मान लाने की आवश्यकता मिलती है, फिर डालने के लिए डालने का प्रयास करें। क्या ओरेकल में पोस्टग्रेस '['वक्र' /' अगलीवाल'/'lastval'] (http://www.postgresql.org/docs/current/static/functions-sequence.html) फ़ंक्शंस, उपयोग योग्य इनलाइन जैसी कुछ भी है? (जिज्ञासा से पूछना।) – Charles

संबंधित मुद्दे