2010-08-06 12 views
7

जब मैं MySQL कंसोल में निम्नलिखित को निष्पादित, यह ठीक काम करता है:PHP के माध्यम से LAST_INSERT_ID() का उपयोग कर?

INSERT INTO videos (embed_code) VALUES ('test code here'); 
SELECT LAST_INSERT_ID(); 

लेकिन, जब मैं PHP के माध्यम से ऊपर प्रश्नों पर अमल, परिणाम खाली है।

डेटा अबास्ट्रक्शन के तहत, मैं DB नामक डेटाबेस एक्सेस क्लास का उपयोग कर रहा हूं। यह कैसे मैं PHP के माध्यम से ऊपर प्रश्नों की कोशिश की है है:

$embedCode = htmlentities($_POST['embed_code']); 

//Insert video in database **WORKS** 
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');"); 

//Retrieve id **DOES NOT WORK** 
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();"); 
$videoId = $row[0]; 

यह मेरे, embed_code द्वारा नए आईडी का चयन करने के लिए के रूप में embed_code दोहराया जा सकता विश्वसनीय नहीं है।

धन्यवाद!

उत्तर

4

क्या आपके डेटाबेस क्लास में अंतिम प्रविष्टि आईडी को पकड़ने के लिए कोई फ़ंक्शन नहीं है? अन्यथा इसके बजाय mysql_insert_id() आज़माएं।

http://nl.php.net/mysql_insert_id

+0

हाँ, आप सही हैं। मैं पीडीओ का उपयोग कर रहा हूं और इसमें 'lastInsertId()' विधि है! मैंने इसके बारे में नहीं सोचा था। धन्यवाद! –

1

PHP में mysql_insert_id नामक एक फ़ंक्शन है जो आपको SELECT LAST_INSERT_ID(); क्वेरी के समान परिणाम देगा।

0

इस के लिए समर्पित कार्यों रहे हैं - आप SQL संस्करण यह काम नहीं करता के रूप में प्रयोग नहीं किया जाना चाहिए।

MySQL लाइब्रेरी में आपको mysql_insert_id फ़ंक्शन का उपयोग करना चाहिए, जबकि mysqli ऑब्जेक्ट में insert-id संपत्ति है। यह निश्चित रूप से आप जो कुछ भी डीबी कक्षा का उपयोग कर रहे हैं उसमें उजागर हो सकता है।

+0

यह क्यों काम नहीं करता है? – iX3

0

आप PHP के mysql_insert_id फ़ंक्शन के साथ प्रयास कर सकते हैं।

मुझे लगता है कि क्या हो रहा है यह है कि प्रत्येक DB::query कॉल एक अलग लेनदेन में है, इसलिए $row खाली है। हो सकता है कि आप उसी लेनदेन के भीतर दोनों कॉल चलाने का प्रयास करने के लिए DB:query दस्तावेज़ पढ़ सकें।

0

mysql_insert_id को बहिष्कृत किया गया है। तो मुझे लगता है कि इस धागे को अद्यतन करने की जरूरत है।

0

mysql_insert_id PHP 5.5.0 के बाद से बहिष्कृत के रूप में चिह्नित किया गया है।

इस उदाहरण में यूआईडी तालिका वीडियो की प्राथमिक कुंजी है।

$row = DB::getMultipleRows("SELECT uid FROM videos WHERE uid=LAST_INSERT_ID();"); 
if (
    isset($row) && 
    is_array($row) && 
    isset($row['0']) && 
    is_array($row['0']) && 
    isset($row['0']['uid']) 
) { 
    $videoId = $row['0']['uid']; 
} 
0

आपको अपनी कक्षा के बाहरी भाग में पीडीओ के अंतिम इंसर्ट आईडी को वापस करना चाहिए। उदाहरण:

class DB 
{ 
    public $last_insert_id; 
    function x() 
    { 
     $stmt = $db->prepare($Query); 
     $stmt->execute(); 
     $this->last_insert_id = $db->lastInsertId(); 
    }  
} 
संबंधित मुद्दे