2013-03-11 5 views
8

मेरे पास निम्न कोड है। Mysqli_insert_id() (इस मामले में "$ last_row"), जो तालिका की आखिरी पंक्ति वापस करने वाला है, हमेशा 0 लौटा रहा है। ऐसा क्यों है?mysqli_insert_id() हमेशा 0 क्यों लौट रहा है?

<?php 
include('connect-db.php'); 
$submit_date = date("Ymd"); 
$content = mysqli_real_escape_string($connection, htmlspecialchars($_POST['editor'])); 
$ip_address = $_SERVER['REMOTE_ADDR']; 
$last_row = mysqli_insert_id($connection); 

if ($content != '') { 

$sql = "INSERT INTO source (track_id, submit_date, ip, content) VALUES ('$last_row', '$submit_date','$ip_address','$content')"; 

if (!mysqli_query($connection,$sql)) 
    { 
    die('Error: ' . mysqli_error($connection)); 
    } 

echo $last_row; 
mysqli_close($connection); 
} 

?> 
+1

"* वापसी मान: AUTO_INCREMENT फ़ील्ड का मान जिसे पिछली क्वेरी द्वारा अपडेट किया गया था। ** यदि कनेक्शन पर कोई पिछली क्वेरी नहीं थी या क्वेरी ने AUTO_INCREMENT मान ** अपडेट नहीं किया था, तो शून्य लौटाता है। * " – DCoder

+0

देखें: http://php.net/manual/en /mysqli.insert-id.php –

उत्तर

16

mysqli_insert_idनहीं तालिका के अंतिम पंक्ति के आईडी लौटने। the docs से, यह:

... एक तालिका पर क्वेरी द्वारा उत्पन्न आईडी को AUTO_INCREMENT विशेषता वाले कॉलम के साथ प्रस्तुत करता है। यदि अंतिम क्वेरी INSERT या UPDATE कथन नहीं थी या संशोधित तालिका में AUTO_INCREMENT विशेषता वाला कोई कॉलम नहीं है, तो यह फ़ंक्शन शून्य वापस करेगा।

(मेरे जोर)

यही है, अगर आप इसे तुरंत के बाद, एक डालने एक आईडी स्वत: जनरेट को चलाने के लिए एक ही कनेक्शन आप के साथ सम्मिलित किया पर थे, यह होगा उस डालने के लिए उत्पन्न आईडी वापस करें।

यह ऊपर लिंक डॉक्स में उदाहरण के रूप में रेखांकित किया गया है:

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)"; 
$mysqli->query($query); 

printf ("New Record has id %d.\n", $mysqli->insert_id); 
11

परिणाम प्राप्त करने के लिए, आप अपने सम्मिलित करें क्वेरी

+1

mysqli_insert_id() के भीतर $ कनेक्शन निर्दिष्ट करना महत्वपूर्ण है। अन्यथा आईडी पुनर्प्राप्त नहीं की जा सकती है। – Devner

0

अन्य लोगों के लिए के बाद

$last_row = mysqli_insert_id($connection); 

रखूं यहां आ रहा है, शायद आपने INSERT IGNORE INTO की कोशिश की है और आपके पास UNIQUE मान है जो पहले ही डाला गया था। उस स्थिति में, यह आईडी शून्य है।

यदि MySQL कनेक्शन से बाहर हो जाता है तो आपको "शून्य" भी मिल जाएगा। मैं लगातार कनेक्शन पर कोई विशेषज्ञ नहीं हूं लेकिन इससे किसी की मदद हो सकती है?

आप शायद पीएचपी "mysql" जानते हैं विस्तार लगातार कनेक्शन समर्थित लेकिन वे नए "mysqli" विस्तार में अक्षम थे --Peter Zaitsev

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