PHP / MySQL सम्मिलित पंक्ति तब 'आईडी' प्राप्त करें


192

जब मैं एक पंक्ति सम्मिलित करता हूं, तो मेरे टेबल ऑटो का 'आईडी' क्षेत्र बढ़ जाता है। मैं एक पंक्ति सम्मिलित करना चाहता हूं और फिर उस आईडी को प्राप्त करना चाहता हूं।

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

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

जवाबों:


255
$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);

देखते हैं mysqli_insert_id()

आप जो भी करते हैं, सम्मिलित नहीं करते हैं और फिर एक " SELECT MAX(id) FROM mytable" करते हैं। जैसा आप कहते हैं, यह एक दौड़ की स्थिति है और इसकी कोई आवश्यकता नहीं है। mysqli_insert_id()पहले से ही यह कार्यक्षमता है।


58
PDO समतुल्य है PDO :: lastInsertId ( us3.php.net/manual/en/pdo.lastinsertid.php )।
मैथ्यू फ्लेशेन

11
क्या यह अभी भी काम करता है अगर एक ही समय में 10000 async आवेषण होंगे?
zie1ony

16
@ zie1ony हाँ, यह एक लाख एसिंक्रोनस आवेषण के लिए काम करेगा क्योंकि MySQL ACID अनुरूप है। कई एसिंक्स आवेषणों में से प्रत्येक व्यक्ति अपने स्वयं के अलग-अलग सत्र के भीतर होता है, जो उस समय होता है जब आप mysql_insert_id () से अपने PHP में (या LAST_INSERT_ID से) MySQL में कॉल करते हैं
rodrigo-silveira

7
डॉक्टर पर ध्यान देने योग्य कुछ है: mysql_insert_id() will convert the return type of the native MySQL C API function mysql_insert_id() to a type of long (named int in PHP). If your AUTO_INCREMENT column has a column type of BIGINT (64 bits) the conversion may result in an incorrect value. Instead, use the internal MySQL SQL function LAST_INSERT_ID() in an SQL query. For more information about PHP's maximum integer values, please see the integer documentation.\
एल्बेक

7
सब कुछ फिर से लिखने की जरूरत है मैंने कभी लिखा है -_-
de_nuit

39

MySQL फ़ंक्शन LAST_INSERT_ID()आपको बस वही चाहिए जो इस सत्र के दौरान डाली गई आईडी को पुनः प्राप्त करता है । तो यह उपयोग करने के लिए सुरक्षित है, भले ही अन्य प्रक्रियाएं हों (अन्य लोग सटीक एक ही स्क्रिप्ट को कॉल करते हैं, उदाहरण के लिए) एक ही तालिका में मान सम्मिलित करना।

पीएचपी समारोह mysql_insert_id()कॉल करने जैसा ही होता है SELECT LAST_INSERT_ID()के साथ mysql_query()


2
नायब echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID(600)'); echo mysql_insert_id(); mysql_query('SELECT LAST_INSERT_ID()'); दूसरा mysql_insert_id(), जहां जैसा mysql_query('SELECT LAST_INSERT_ID()')होगा 600 को प्रतिबिंबित नहीं करता है । प्राप्त करने के लिए mysql_insert_id()परिवर्तन आपको पहले एक डालने या अद्यतन (जो 0 पंक्तियों को प्रभावित कर सकते हैं) क्या करना है को प्रतिबिंबित करने के। बहुत अंतिम पैराग्राफ देखें: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
क्लिफर्डलाइफ़

28

PHP की वेबसाइट के रूप में, mysql_insert_id अब पदावनत हो गया है और हमें PDO का उपयोग करना चाहिए। पीडीओ के साथ ऐसा करने के लिए, निम्नानुसार आगे बढ़ें:

$db = new PDO('mysql:dbname=database;host=localhost', 'user', 'pass');
$statement = $db->prepare('INSERT INTO people(name, city) VALUES(:name, :city)');
$statement->execute( array(':name' => 'Bob', ':city' => 'Montreal') );

echo $db->lastInsertId();

4
हमारे पास PDO या MySQLi (जो मैं यहां एक अन्य उत्तर में वर्णित करता हूं) का उपयोग करने का विकल्प है । एक अच्छी तुलना: code.tutsplus.com/tutorials/…
ल्यूक

20

जैसा कि @NaturalBornCamper ने कहा, mysql_insert_id अब पदावनत हो गया है और इसका उपयोग नहीं किया जाना चाहिए । विकल्प अब PDO या mysqli का उपयोग करने के लिए हैं। NaturalBornCamper ने अपने उत्तर में PDO को समझाया, इसलिए मैं दिखाऊंगा कि MySQLi ( MySQL इम्प्रूव्ड ) के साथ mysqli_insert_id का उपयोग कैसे किया जाए

// First, connect to your database with the usual info...
$db = new mysqli($hostname, $username, $password, $databaseName);
// Let's assume we have a table called 'people' which has a column
// called 'people_id' which is the PK and is auto-incremented...
$db->query("INSERT INTO people (people_name) VALUES ('Mr. X')");
// We've now entered in a new row, which has automatically been 
// given a new people_id. We can get it simply with:
$lastInsertedPeopleId = $db->insert_id;
// OR
$lastInsertedPeopleId = mysqli_insert_id($db);

अधिक उदाहरणों के लिए PHP डॉक्यूमेंट देखें: http://php.net/manual/en/mysqli.insert-id.php


उस पकड़ने के लिए धन्यवाद। मैं वास्तव में PHP के तीर संकेतन पर जावास्क्रिप्ट का डॉट नोटेशन पसंद करता हूं। : /
ल्यूक

7

मैं केवल एक छोटा सा विवरण जोड़ना चाहता हूं lastInsertId();

उस समय एक से अधिक पंक्ति में प्रवेश करते समय, यह अंतिम आईडी नहीं देता है , लेकिन अंतिम आवेषण के संग्रह की पहली आईडी है।

निम्नलिखित उदाहरण पर विचार करें

$sql = 'INSERT INTO my_table (varNumb,userid) VALUES
     (1, :userid),
     (2, :userid)';
$sql->addNewNames = $db->prepare($sql);
addNewNames->execute(array(':userid' => $userid));

echo $db->lastInsertId();

यहाँ क्या होता है कि मैं my_tableदो नई पंक्तियों में धकेलता हूँ। तालिका की आईडी ऑटो-इंक्रीमेंट है। यहां, एक ही उपयोगकर्ता के लिए, मैं एक अलग के साथ दो पंक्तियों को जोड़ता हूं varNumb

अंत में गूँजती मूल्य पंक्ति की आईडी के बराबर होगी varNumb=1, जहाँ अंतिम पंक्ति की आईडी नहीं है , लेकिन अंतिम अनुरोध में जोड़ी गई पहली पंक्ति की आईडी है।


एक समय में एक ही ऑपरेशन पर
टिके रहना

1

एक उदाहरण।

    $query_new = "INSERT INTO students(courseid, coursename) VALUES ('', ?)";
    $query_new = $databaseConnection->prepare($query_new);
    $query_new->bind_param('s', $_POST['coursename']);
    $query_new->execute();
    $course_id = $query_new->insert_id;
    $query_new->close();

कोड लाइन $course_id = $query_new->insert_id;अंतिम सम्मिलित पंक्ति की आईडी प्रदर्शित करेगी। उम्मीद है की यह मदद करेगा।


1

इस तरह से प्रयास करें कि आपको उत्तर मिल सके:

<?php
$con=mysqli_connect("localhost","root","","new");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

mysqli_query($con,"INSERT INTO new values('nameuser','2015-09-12')");

// Print auto-generated id
echo "New record has id: " . mysqli_insert_id($con);

mysqli_close($con);
?>

निम्नलिखित लिंक पर एक नज़र है:

http://www.w3schools.com/php/func_mysqli_insert_id.asp

http://php.net/manual/en/function.mysql-insert-id.php

कृपया यह भी नोट करें कि यह एक्सटेंशन PHP 5.5 में हटा दिया गया था और PHP 7.0 में हटा दिया गया था



0

यह कोशिश करो ... यह मेरे लिए काम किया!

$sql = "INSERT INTO tablename (row_name) VALUES('$row_value')";
    if (mysqli_query($conn, $sql)) {
    $last_id = mysqli_insert_id($conn);
    $msg1 = "New record created successfully. Last inserted ID is: " . $last_id;
} else {
    $msg_error = "Error: " . $sql . "<br>" . mysqli_error($conn);
    }

-1

एक और संभावित उत्तर होगा:

जब आप तालिका को परिभाषित करते हैं, तो कॉलम और डेटा के साथ। कॉलम आईडी में संपत्ति AUTO_INCREMENT हो सकती है

इस विधि से, आपको आईडी के बारे में चिंता करने की ज़रूरत नहीं है , यह स्वतः ही हो जाएगा

उदाहरण के लिए ( w3schools से लिया गया )

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)

आशा है कि यह किसी के लिए उपयोगी होगा।

संपादित करें: यह केवल एक हिस्सा है जहां आप परिभाषित करते हैं कि स्वचालित आईडी कैसे बनाई जाए, इसे बनाने के बाद प्राप्त करने के लिए, पिछले उत्तर सही हैं।


यह बिल्कुल संभव जवाब नहीं है, ओपी पहले से ही बताता है कि वे ऑटो-इन्क्रीमेंट (ऑटो वृद्धि) का उपयोग कर रहे हैं। ओपी यह जानना चाहता है कि स्वचालित रूप से निर्मित आईडी।
रोज़ा

ठीक है, फिर से पढ़ने के बाद मैंने देखा है कि समस्या केवल आईडी उत्पन्न नहीं कर रही है, ओपी भी उस आईडी को प्राप्त करना चाहता है। परिभाषा के लिए धन्यवाद: D
neoSmith
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.