পিএইচপি / মাইএসকিউএল সারি সন্নিবেশ করুন তারপর 'আইডি' পান


192

আমি যখন একটি সারি সন্নিবেশ করি তখন আমার টেবিল অটোর 'আইডি' ক্ষেত্রটি বৃদ্ধি পায়। আমি একটি সারি sertোকাতে এবং তারপরে সেই আইডি পেতে চাই।

আমি যেমনটি বলেছিলাম ঠিক তেমনটিই করব, তবে সারিটি সন্নিবেশ করা এবং আইডি পাওয়ার মধ্যে সময়টি নিয়ে চিন্তা না করে কি এমন উপায় আছে যে আমি এটি করতে পারি?

আমি জানি যে আমি সারিটির জন্য যে ডাটাবেসটি প্রবেশ করানো হয়েছে তার সাথে মেলে যা তথ্যের সাথে মেলে, তবে সেখানে একটি নূন্য পরিবর্তন হবে যা ডুপ্লিকেট থাকবে, কেবলমাত্র পার্থক্যটি আইডি হ'ল।

উত্তর:


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()

আপনি যাই করুন না কেন sertোকান না এবং তারপরে একটি " SELECT MAX(id) FROM mytable" করুন। যেমনটি আপনি বলেছেন, এটি একটি জাতি শর্ত এবং এর কোনও প্রয়োজন নেই। mysqli_insert_id()ইতিমধ্যে এই কার্যকারিতা রয়েছে।


58
PDO সমতুল্য হ'ল PDO :: lastInsertId ( us3.php.net/manual/en/pdo.lastinsertid.php )।
ম্যাথু ফ্ল্যাশেন

11
একই সময়ে যদি 10000 অ্যাসিঙ্ক সন্নিবেশ করানো হয় তবে এটি এখনও কার্যকর হয়?
zie1ony

16
@ zie1ony হ্যাঁ, এটি মিলিয়ন অ্যাসিঙ্ক প্রবেশকারীর জন্য কাজ করবে কারণ মাইএসকিউএল এসিডি অনুগত। অনেক ASYNC টিপে থেকে প্রতিটি পৃথক সন্নিবেশ নিজস্ব মধ্যে বিচ্ছিন্ন , সেশন যা যেখানে আইডি থেকে আপনি আপনার পিএইচপি (অথবা LAST_INSERT_ID () মাইএসকিউএল মধ্যে) থেকে mysql_insert_id () কলের আসে
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
আমি যা লিখেছি তার
সবকটি নতুন করে

39

মাইএসকিউএল ফাংশন LAST_INSERT_ID()আপনার যা প্রয়োজন ঠিক তা করে: এটি এই সেশনের সময় theোকানো আইডিটি পুনরুদ্ধার করে । সুতরাং এটি ব্যবহার করা নিরাপদ, এমনকি যদি অন্য প্রক্রিয়াগুলি থাকে (অন্য ব্যক্তিরা ঠিক একই স্ক্রিপ্টকে কল করে, উদাহরণস্বরূপ) একই টেবিলের মধ্যে মানগুলি সন্নিবেশ করানো।

পিএইচপি ফাংশন 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()600 প্রতিফলিত করে না, যেখানে mysql_query('SELECT LAST_INSERT_ID()')হবে as পেতে mysql_insert_id()পরিবর্তন আপনাকে প্রথমে একটি সন্নিবেশ অথবা একটি আপডেট (যা 0 সারি প্রভাবিত করতে পারে) যা করতে হবে প্রতিফলিত। একেবারে শেষ অনুচ্ছেদটি দেখুন: http://dev.mysql.com/doc/refman/5.0/en/information-function.html#function_last-insert-id
ক্লিফোর্ডলাইফ

28

পিএইচপি-র ওয়েবসাইট হিসাবে, 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 (যা আমি এখানে অন্য উত্তরে বর্ণনা করছি) ব্যবহার করার বিকল্প পেয়েছি। একটি ভাল তুলনা: কোড. tutsplus.com
লুক

20

@ ন্যাচারালবার্নক্যাম্পার যেমন বলেছে, মাইএসকিএল_ইন্টার_আইডি এখন অবচয় করা হয়েছে এবং এটি ব্যবহার করা উচিত নয় । বিকল্পগুলি এখন পিডিও বা মাইএসকিলি ব্যবহার করতে পারে। ন্যাচারালবার্নক্যাম্পার তার উত্তরে পিডিওকে ব্যাখ্যা করেছিলেন, তাই আমি মাইএসকিউএলআই ( মাইএসকিউএল উন্নত ) সাথে 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);

আরও উদাহরণের জন্য পিএইচপি ডকুমেন্টেশন দেখুন: http://php.net/manual/en/mysqli.insert-id.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;সর্বশেষ sertedোকানো সারির আইডি প্রদর্শন করবে। আশাকরি এটা সাহায্য করবে.


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

এছাড়াও দয়া করে একটি নোট রাখুন যে এই এক্সটেনশনটি পিএইচপি 5.5-এ অবনতি হয়েছে এবং পিএইচপি 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 থাকতে পারে

এই পদ্ধতিতে, আপনাকে আইডি সম্পর্কে চিন্তা করতে হবে না , এটি স্বয়ংক্রিয়ভাবে তৈরি হয়ে যাবে

উদাহরণস্বরূপ ( w3 স্কুল থেকে নেওয়া )

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)
)

আশা করি এটি কারও পক্ষে সহায়ক হবে।

সম্পাদনা করুন: এটি কেবলমাত্র সেই অংশ যেখানে আপনি একটি স্বয়ংক্রিয় আইডি উত্পন্ন করার উপায় নির্ধারণ করেন, তৈরি হওয়ার পরে এটি পেতে, পূর্ববর্তী উত্তরগুলি সঠিক।


এটি মোটেই সম্ভব উত্তর নয়, ওপি ইতিমধ্যে জানিয়েছে যে তারা অটো-ইনক্রিমেন্ট (অটো বৃদ্ধি) ব্যবহার করছে। ওপি স্বয়ংক্রিয়ভাবে উত্পন্ন আইডিটি পুনরুদ্ধার করতে চায়।
রোজা

ঠিক আছে, আবার পড়ার পরে আমি লক্ষ্য করেছি যে সমস্যাটি কেবল আইডি তৈরি করে না, ওপিও এই আইডিটি পেতে চায়। সংজ্ঞাটির জন্য ধন্যবাদ: ডি
নিওস্মিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.