আমার একটি টেবিল রয়েছে যাতে প্রায়শই নতুন ডেটা .োকানো হয়। আমার সারণির খুব শেষ আইডি পাওয়া দরকার। কিভাবে আমি এটি করতে পারব?
এর সাথে কি মিল আছে SELECT MAX(id) FROM table?
আমার একটি টেবিল রয়েছে যাতে প্রায়শই নতুন ডেটা .োকানো হয়। আমার সারণির খুব শেষ আইডি পাওয়া দরকার। কিভাবে আমি এটি করতে পারব?
এর সাথে কি মিল আছে SELECT MAX(id) FROM table?
INSERTএবং কোয়েরির মধ্যে টেবিলের মধ্যে কিছু সন্নিবেশ করায় তবে MAX(id)আপনি একটি আইডি পেতে পারেন যা আপনার শেষ আইডি নয়।
উত্তর:
আপনি যদি পিডিও ব্যবহার করেন তবে ব্যবহার করুন PDO::lastInsertId।
আপনি যদি মাইস্ক্লি ব্যবহার করছেন তবে ব্যবহার করুন mysqli::$insert_id।
আপনি যদি এখনও মাইএসকিএল ব্যবহার করেন:
দয়া করে
mysql_*নতুন কোডে ফাংশন ব্যবহার করবেন না । এগুলি আর রক্ষণাবেক্ষণ করা হয় না এবং সরকারীভাবে হ্রাস করা হয় । দেখুন লাল বক্স ? পরিবর্তে প্রস্তুত বিবৃতি সম্পর্কে জানুন, এবং PDO বা মাইএসকিউএলি ব্যবহার করুন- এই নিবন্ধটি আপনাকে সিদ্ধান্ত নিতে সহায়তা করবে। আপনি যদি PDO চয়ন করেন তবে এখানে একটি ভাল টিউটোরিয়াল রয়েছে ।
তবে যদি আপনার হয়, ব্যবহার করুন mysql_insert_id।
mysql_insert_id পরে আপনার mysql_query। অবশ্যই যদি আপনি এর মধ্যে একই সংযোগে আরও বেশ কয়েকটি ক্যোয়ারিকে কার্যকর করেন তবে ভাল, সেখানে আপনাকে সাহায্য করতে পারে এমন কিছুই নেই।
PDOআমরা কোথায়ও দেখি? ফিচারটির তুলনা আবার দেখি । mysqliআপনি যখন নিম্ন স্তরের স্টাফ দিয়ে আপনার হাতটি নোংরা করতে হবে তখন এটি বিজয়ী তা স্পষ্ট । অন্য কথায়, এমনকি যদি কেউ পিডিও চয়ন করে তবে শেষ পর্যন্ত তাকে mysqliযেভাবেই ব্যবহার করা প্রয়োজন ।
বর্তমান সংযোগে সর্বশেষ আইডি sertedোকানো ছিল তা জানার জন্য একটি ফাংশন রয়েছে
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
প্লাস সর্বোচ্চ ব্যবহার করা একটি খারাপ ধারণা কারণ আপনার কোডটি একই সময়ে দুটি পৃথক সেশনে ব্যবহার করা হলে সমস্যা হতে পারে ।
এই ফাংশনটিকে mysql_insert_id বলা হয়
ঠিক আছে. এছাড়াও আপনি LAST_INSERT_ID () ব্যবহার করতে পারেন
select max(id)from tableঠিক আছে?
সঙ্গে PDO :
$pdo->lastInsertId();
সঙ্গে Mysqli :
$mysqli->insert_id;
দয়া করে mysql_*নতুন কোডে ফাংশন ব্যবহার করবেন না । এগুলি আর রক্ষণাবেক্ষণ করা হয় না এবং সরকারীভাবে হ্রাস করা হয় । দেখুন লাল বক্স ? পরিবর্তে প্রস্তুত বিবৃতি সম্পর্কে জানুন, এবং PDO বা মাইএসকিউএলি ব্যবহার করুন- এই নিবন্ধটি আপনাকে সিদ্ধান্ত নিতে সহায়তা করবে। আপনি যদি PDO চয়ন করেন তবে এখানে একটি ভাল টিউটোরিয়াল রয়েছে ।
আপনি যা লিখেছেন idসেগুলি আপনাকে সর্বোত্তমভাবে ধরে নিবে যে তারা অনন্য এবং স্বতঃবৃদ্ধিযুক্ত যা ধরে নিলে সম্মতিযুক্ত ইস্যুগুলির সাথে আপনি ঠিক আছেন বলে ধরে নেওয়া ভাল।
যেহেতু আপনি মাইএসকিউএলটিকে আপনার ডাটাবেস হিসাবে ব্যবহার করছেন তাই এখানে নির্দিষ্ট ফাংশন রয়েছে LAST_INSERT_ID()যা কেবলমাত্র বর্তমান সংযোগটিতে কাজ করে যা সন্নিবেশ করায়।
পিএইচপি এটির জন্য একটি নির্দিষ্ট ফাংশন সরবরাহ করে 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);
কোডিগিটারে সর্বশেষ idোকানো আইডি পেতে সন্নিবেশ ক্যোয়ারী চালানোর পরে insert_id()ডাটাবেসে ডাকা একটি ফাংশন ব্যবহার করুন, এটি সর্বশেষ inোকানো আইডি ফিরে আসবে
প্রাক্তন:
$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();
$id = mysql_insert_id();
আপনি একটি দ্বারা সর্বশেষ আইডি পাবেন
$id = last_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');
মাইসকিলি :: সন্নিবেশ_আইড হবে 1 নয় 3।
সঠিক মান পেতে:
mysqli::insert_id + mysqli::affected_rows) - 1
এটি ডকুমেন্ট হয়েছে তবে এটি কিছুটা অস্পষ্ট।
আমি চাইলে টেবিলের সর্বশেষ স্বয়ংক্রিয়_আমারক আইডি পেতে খাঁটি মাইএসকিউএল সিনট্যাক্স ব্যবহার করতে পছন্দ করি।
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';
এটাই.
উদাহরণ সহ কোনও উত্তর না পেয়ে দুঃখজনক।
মাইস্ক্লি :: sert সন্নিবেশ_আইডি ব্যবহার করে :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID
পিডিও :: সর্বশেষতম আইডি ব্যবহার করে :
$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 ফিরে এসেছে Especially বিশেষত যদি আমি সঞ্চিত পদ্ধতি ব্যবহার করি তবে এটি কার্যকর করে 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 depricating হয়
<?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)
এটি বর্তমান সংযোগের সর্বশেষ .োকানো আইডিটি ফিরিয়ে দেয়, সুতরাং আপনি যদি নিজের সংযোগগুলি সঠিকভাবে পরিচালনা করছেন তবে এটি কাজ করা উচিত। অন্তত আমার জন্য কাজ করেছেন।