मेरे पास एक तालिका है जिसमें नया डेटा अक्सर डाला जाता है। मुझे तालिका की अंतिम आईडी प्राप्त करने की आवश्यकता है। मैं यह कैसे कर सकता हूँ?
क्या यह समान है SELECT MAX(id) FROM table?
मेरे पास एक तालिका है जिसमें नया डेटा अक्सर डाला जाता है। मुझे तालिका की अंतिम आईडी प्राप्त करने की आवश्यकता है। मैं यह कैसे कर सकता हूँ?
क्या यह समान है SELECT MAX(id) FROM table?
INSERTऔर क्वेरी के बीच तालिका में कुछ सम्मिलित करता है MAX(id), तो आपको एक आईडी मिल सकती है जो आपकी अंतिम आईडी नहीं है।
जवाबों:
यदि आप पीडीओ का उपयोग कर रहे हैं, तो उपयोग करें PDO::lastInsertId।
यदि आप मैसकली का उपयोग कर रहे हैं, तो उपयोग करें mysqli::$insert_id।
यदि आप अभी भी मैसकल का उपयोग कर रहे हैं:
कृपया,
mysql_*नए कोड में कार्यों का उपयोग न करें । वे अब बनाए नहीं हैं और आधिकारिक तौर पर पदावनत हैं । लाल बॉक्स देखें? इसके बजाय तैयार किए गए कथनों के बारे में जानें, और PDO या MySQLi का उपयोग करें- यह लेख आपको यह तय करने में मदद करेगा कि कौन सा। यदि आप पीडीओ चुनते हैं, तो यहां एक अच्छा ट्यूटोरियल है ।
लेकिन अगर आपको इस्तेमाल करना है mysql_insert_id।
mysql_insert_id बाद सही का उपयोग नहीं करते mysql_query। यदि निश्चित रूप से आप बीच में एक ही कनेक्शन पर कई अन्य प्रश्नों को निष्पादित करते हैं, तो ठीक है, वहाँ कुछ भी नहीं है जो आपकी मदद कर सकता है।
PDOकि हम हर जगह क्या देख रहे हैं? आइए एक बार फिर से फीचर की तुलना करें। यह स्पष्ट है कि mysqliविजेता तब होता है जब आपको अपने हाथों को निचले स्तर के सामान के साथ गंदा करने की आवश्यकता होती है। दूसरे शब्दों में, भले ही कोई पीडीओ चुनता है, उसे अंततःmysqli वैसे भी उपयोग करने की आवश्यकता होगी ।
यह जानने के लिए एक फ़ंक्शन है कि वर्तमान कनेक्शन में अंतिम आईडी क्या डाली गई थी
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
अधिकतम का उपयोग करना एक बुरा विचार है क्योंकि इससे समस्याएं हो सकती हैं यदि आपका कोड दो अलग-अलग सत्रों में एक ही समय में उपयोग किया जाता है।
उस फ़ंक्शन को mysql_insert_id कहा जाता है
यह ठीक है। इसके अलावा आप LAST_INSERT_ID का उपयोग कर सकते हैं ()
select max(id)from tableठीक है?
पीडीओ के साथ :
$pdo->lastInsertId();
मैसकली के साथ :
$mysqli->insert_id;
कृपया, mysql_*नए कोड में कार्यों का उपयोग न करें । वे अब बनाए नहीं हैं और आधिकारिक तौर पर पदावनत हैं । लाल बॉक्स देखें? इसके बजाय तैयार किए गए कथनों के बारे में जानें, और PDO या MySQLi का उपयोग करें- यह लेख आपको यह तय करने में मदद करेगा कि कौन सा। यदि आप पीडीओ चुनते हैं, तो यहां एक अच्छा ट्यूटोरियल है ।
आपने जो लिखा है, वह आपको सबसे बड़ा idमानकर चलता है कि वे अद्वितीय और ऑटो-इन्क्रीमेंटेड थे जो ठीक मान लेंगे कि आप समसामयिक मुद्दों को आमंत्रित करने के साथ ठीक हैं।
चूंकि आप MySQL को अपने डेटाबेस के रूप में उपयोग कर रहे हैं, इसलिए एक विशिष्ट फ़ंक्शन है LAST_INSERT_ID()जो केवल वर्तमान कनेक्शन पर काम करता है जो सम्मिलित करता है।
PHP के लिए एक विशिष्ट कार्य भी कहा जाता है प्रदान करता है mysql_insert_id।
कोशिश करें कि यह ठीक काम करे:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
आप अंतर्निहित php फ़ंक्शन द्वारा नवीनतम सम्मिलित आईडी प्राप्त कर सकते हैं mysql_insert_id();
$id = mysql_insert_id();
आप भी नवीनतम आईडी प्राप्त करें
$id = last_insert_id();
कोडाइनाइटर में अंतिम सम्मिलित आईडी प्राप्त करने के लिए, सम्मिलित क्वेरी को निष्पादित करने के बाद insert_id()डेटाबेस पर कॉल किए गए एक फ़ंक्शन का उपयोग करें, यह अंतिम सम्मिलित आईडी वापस कर देगा
उदाहरण के लिए:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
एक पंक्ति में
echo $this->db->insert('mytable',$data)->insert_id();
इसका उपयोग करना ठीक है mysql_insert_id(), लेकिन इसका उपयोग करने के बारे में एक विशिष्ट नोट है, आपको इसे INSERT क्वेरी के क्रियान्वयन के बाद कॉल करना होगा, इसका मतलब एक ही स्क्रिप्ट सत्र में है। यदि आप इसका उपयोग करते हैं अन्यथा यह सही ढंग से काम नहीं करेगा।
नोट: यदि आप एक स्टेटमेंट mysqli के साथ कई इन्सर्ट करते हैं :: insert_id सही नहीं होगा।
टेबल:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
अब अगर तुम करते हो:
insert into xyz (name) values('one'),('two'),('three');
Mysqli :: insert_id 1 नहीं 3 होगा।
सही मान प्राप्त करने के लिए:
mysqli::insert_id + mysqli::affected_rows) - 1
यह दस्तावेज़ है, लेकिन यह थोड़ा अस्पष्ट है।
मैं अपनी पसंद की तालिका के अंतिम auto_increment id प्राप्त करने के लिए एक शुद्ध MySQL सिंटैक्स का उपयोग करना पसंद करता हूं।
php mysql_insert_id () और mysql last_insert_id () केवल अंतिम लेनदेन आईडी दें।
यदि आप अपने स्कीमा में किसी भी तालिका की अंतिम स्वत: संवर्धित आईडी चाहते हैं (न केवल अंतिम लेनदेन एक), तो आप इस क्वेरी का उपयोग कर सकते हैं
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
बस।
एक उदाहरण के साथ कोई जवाब नहीं देखना दुखद है।
मैसकली का उपयोग :: $ insert_id :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID
PDO :: lastInsertId का उपयोग करना :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
MySQLiलेन-देन का उपयोग करना मैं कभी-कभी प्राप्त करने में सक्षम नहीं था mysqli::$insert_id, क्योंकि यह 0. लौटा था। खासकर अगर मैं संग्रहीत प्रक्रियाओं का उपयोग कर रहा था, तो यह निष्पादित हो रहा है INSERT। इसलिए लेनदेन के भीतर एक और तरीका है:
<?php
function getInsertId(mysqli &$instance, $enforceQuery = false){
if(!$enforceQuery)return $instance->insert_id;
$result = $instance->query('SELECT LAST_INSERT_ID();');
if($instance->errno)return false;
list($buffer) = $result->fetch_row();
$result->free();
unset($result);
return $buffer;
}
?>
Mysqli का उपयोग करें क्योंकि mysql निंदनीय है
<?php
$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Conside employee table with id,name,designation
$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";
$mysqli->query($query);
printf ("New Record has id %d.\n", $mysqli->insert_id);
/* close connection */
$mysqli->close();
?>
मैंने कोशिश की
mysqli_insert_id ($ dbConnectionObj)
यह वर्तमान कनेक्शन की अंतिम सम्मिलित आईडी लौटाता है इसलिए यदि आप अपने कनेक्शन को ठीक से प्रबंधित कर रहे हैं तो यह काम करना चाहिए। मेरे लिए कम से कम काम किया।
इस सभी चर्चा से मैं यह मानता हूं कि अधिकतम आईडी की जांच करने का कारण यह जानना है कि आईडी क्या होनी चाहिए .. (यदि मेरी अधिकतम आईडी 5 है तो अगला 5 + 1 = 6 होगा)।
>> अगर यह कारण नहीं है, तो मेरी सबसे अच्छी माफी
यदि आपके CHECK और INSERT के बीच कोई और INSERT की जानकारी देता है तो मामला आपको गलत आईडी देगा।
तो यह हल किया जा सकता है अगर आप हैश बनाएंगे जिसमें टाइमस्टैम्प या अन्य अद्वितीय मूल्य शामिल हो सकते हैं।
फिर उसी फ़ंक्शन में आप खाली मान और अपने हैश के साथ अपनी जानकारी सम्मिलित कर सकते हैं। यदि आपके पास AUTO_INCRECEMENT चयनित है, तो ID बनाएगा।
फिर उसी फ़ंक्शन में आपके पास अभी भी आपका हैश होगा और आप उसी हैश के साथ आईडी की तलाश कर सकते हैं। और फिर आप mysql UPDATE के साथ रिक्त मानों को पूरा कर सकते हैं।
इसमें कुछ और कनेक्शन शामिल हैं, लेकिन यह अभी भी इसे करने का एक तरीका है ...
इसे हल करना सौभाग्य है।
यदि आपकी तालिका में उपयोगकर्ता का नाम, Emp_ID जैसे AUTO INCREMENT कॉलम है, तो आप इस क्वेरी का उपयोग अंतिम सम्मिलित रिकॉर्ड प्राप्त करने के लिए कर सकते हैं * FROM table_name से जहां UserID = (MAX_ का चयन करें) (PHPID) से ( PHP में ) PHP कोड में।
$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
$result = mysqli_query($con, $sql);
फिर आप अपनी आवश्यकता के अनुसार प्राप्त डेटा का उपयोग कर सकते हैं
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);