2012-05-21 13 views
104

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

मैं जानता हूँ कि मैं इस कथन का उपयोग करने के लिए है कि:

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

लेकिन मैं इस कथन का उपयोग आईडी प्राप्त करना चाहते हैं::

LAST_INSERT_ID() 

यही बयान इस तरह एक प्रश्न के साथ काम करता

:
$ID = LAST_INSERT_ID(); 

मैं इस त्रुटि मिलती है

Fatal error: Call to undefined function LAST_INSERT_ID() 

क्या मैं गलत कर रहा हूँ?

उत्तर

220

ऐसा इसलिए है क्योंकि है कि एक एसक्यूएल समारोह, नहीं पीएचपी है। आप PDO::lastInsertId() का उपयोग कर सकते हैं।

तरह:

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

आप पीडीओ एपीआई के बजाय एसक्यूएल के साथ क्या करना चाहते हैं, तो आप यह एक सामान्य चयन क्वेरी की तरह करना होगा:

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

हाँ तुम सही, मैं यह पाया और यह काम करता है, धन्यवाद, मैं इस सवाल का जवाब –

+2

स्वीकार करेंगे @IllyasMimouni आप कृपया उसका वर्णन आपका संपादन कैसे अधिक सुरक्षा प्रदान करता है? एक लेनदेन में एक ही बयान लपेटना कुछ भी नहीं प्रदान करता है। – Corbin

+0

@ कॉरबिन: मैं भाग हटा देता हूं, आप सही थे। – Mimouni

4

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

सही:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
           VALUES($username,$email,$pass)"); 
$sonuc = $stmt->execute(); 
$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 
+8

खराब उदाहरण, चर के प्रश्नों में कोई स्थान नहीं है। तैयार कथन का प्रयोग करें: http://php.net/manual/en/pdo.prepared-statements.php –

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