আমি কীভাবে সর্বশেষ sertedোকানো রেকর্ড আইডি পাব?


9

আমি একটি ডাটাবেস টেবিলের মধ্যে সর্বশেষ rowোকানো সারির রেকর্ড আইডি পেতে চাই। আমি ব্যবহার করার চেষ্টা করছি db_last_insert_id(), তবে এটি একটি ব্যতিক্রম ছুঁড়ে দিচ্ছে ।

অনির্ধারিত ফাংশন কল করুন db_last_insert_id()

আমি কীভাবে সর্বশেষ sertedোকানো রেকর্ড আইডি পাব?


1
এই ফাংশনটি ডি 7-তে উপলব্ধ নয়। drupal.org/node/729970
GoodSp33d

উত্তর:


15

ড্রুপাল 6 এ আপনি নীচের মতো কোড ব্যবহার করবেন।

db_query("INSERT INTO {mytable} (intvar, stringvar, floatvar) VALUES (%d, '%s', %f)", 5, 'hello world', 3.14);
$id = db_last_insert_id('mytable', 'id_fieldname');

ড্রুপাল 7 সমতুল্য কোডটি নীচে রয়েছে।

$id = db_insert('mytable')
  ->fields(array(
    'intvar' => 5,
    'stringvar' => 'hello world',
    'floatvar' => 3.14,
  ))
  ->execute();

আমি সদ্য বিধি db.Actually আমি প্রয়োজন নতুন নিবন্ধিত আইডি (ইউআইডি) থেকে একটি নির্দিষ্ট টেবিল থেকে রেকর্ড আইডি সন্নিবেশিত চান আমি এটা কিভাবে acheive করতে
prashanth

এতে টেবিলের নাম এবং মাঠের নাম উল্লেখ করতে ভুলবেন নাfunction db_last_insert_id($table, $field)
ভ্লাদিস্লাভ

10

আপনি যদি নির্দিষ্ট inোকানো ক্যোয়ারীটি নিজেই নিয়ন্ত্রণ না করেন তবে আপনি সর্বদা একটি সাধারণ পুরানো এসকিউএল কোয়েরি ব্যবহার করতে পারেন:

$last_id = db_query('SELECT MAX(id_col) FROM {table}')->fetchField();

আমি ম্যাক্স (ইউআইডি) ব্যবহার করার চেষ্টা করেছি, তবে আমি শেষ রেকর্ডের উপরে রেকর্ডটি পাচ্ছি
প্রশান্ত

তারপরে রেকর্ডটি এখনও inোকানো হয়নি, সুতরাং নতুন কোনও ইউআইডি উপলব্ধ নেই
ক্লাইভ

আমি ডাটাবেসে নতুন রেকর্ডটি দেখতে পাচ্ছি কিন্তু আমি সেই রেকর্ডটির আইডি পাচ্ছি না
প্রশান্ত

নাহ, এটি অসম্ভব :) আপনি যদি ডাটাবেসে uid দেখতে পান তবে যৌক্তিকভাবে নির্বাচনের জন্য MAX(uid) অবশ্যই সেই ইউআইডি ফিরে আসতে হবে । যদি না হয় আপনার মাইএসকিউএল সার্ভারটি খুব ভাঙা হয়েছে
ক্লাইভ

এটি কেবলমাত্র সম্ভব হবে যদি আপনার রক্ষণটি শেষ রেকর্ড justোকানোর ঠিক আগে ডাকা হয়।
Елин Й.

0
  $id = db_insert('mytable')
       ->fields(array(
       'intvar' => 5,
       'stringvar' => 'hello world',
       'floatvar' => 3.14,
       ))
       ->execute();

$ আইডিতে টেবিলের সর্বশেষ sertedোকানো আইডি থাকে। শুধু ইকো-আইডি করুন।


0

যদি কোনও কারণের আগে আপনাকে ক্ষেত্রের মান সন্নিবেশ করার আগে এটির প্রয়োজন হয় এটি এটি করা প্রায় কাজ।

function _get_id($tableName, $fieldName) {

    $select = db_select($tableName, 'o');
    $fields = array(
        $fieldName,
    );
    $select->fields('o', $fields);
    $result = $select->orderBy($fieldName)->range(0,1)->execute()->fetchAll();
    return $result[0];
}

$lastId = _get_id('table_name' , 'uid');

0

একটি অশোধিত কৌশল, কিন্তু এটি কার্যকর:

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('a','b')", array(), array('return' => Database::RETURN_INSERT_ID));

অথবা

$myInsertID = db_query("INSERT INTO {fred} (fld1,fld2) VALUES ('%s','%s')", array('a','b'), array('return' => Database::RETURN_INSERT_ID));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.