ฉันจะได้รับ ID บันทึกที่แทรกล่าสุดได้อย่างไร


9

ฉันต้องการรับ ID บันทึกสำหรับแถวที่แทรกล่าสุดในตารางฐานข้อมูล ฉันพยายามที่จะใช้db_last_insert_id()แต่มันก็มีข้อยกเว้น

เรียกฟังก์ชั่นที่ไม่ได้กำหนด db_last_insert_id()

ฉันจะได้รับ ID บันทึกที่แทรกล่าสุดได้อย่างไร


1
ฟังก์ชั่นนั้นไม่สามารถใช้งานได้ใน D7 drupal.org/node/729970
GoodSp33d

คำตอบ:


15

ใน Drupal 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');

โค้ดที่เทียบเท่า Drupal 7 มีดังต่อไปนี้

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

ฉันต้องการบันทึก ID ที่เพิ่งแทรกจากตารางเฉพาะจาก db.Actually ฉันต้องการ UserId ที่ลงทะเบียนใหม่ (uid) ในกฎฉันจะได้รับมันได้อย่างไร
prashanth

อย่าลืมระบุชื่อตารางและชื่อฟิลด์ในfunction db_last_insert_id($table, $field)
Vladislav

10

หากคุณไม่ได้ควบคุมการสืบค้นแบบเฉพาะเจาะจงด้วยตัวเองคุณสามารถใช้การสืบค้นแบบ SQL แบบธรรมดาได้เสมอ:

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

ฉันพยายามใช้แม็กซ์ (UID) แต่ฉันได้รับการบันทึกดังกล่าวข้างต้นที่ผ่านมาบันทึก
Prashanth

จากนั้นยังไม่มีการแทรกระเบียนดังนั้นจึงไม่มี uid ใหม่ให้ใช้เลย
Clive

ผมสามารถที่จะเห็นสถิติใหม่ในฐานข้อมูล แต่ฉันไม่ได้รับหมายเลขที่บันทึก
Prashanth

ไม่นั่นเป็นไปไม่ได้ :) หากคุณสามารถดู uid ในฐานข้อมูลการเลือกแบบลอจิคัลMAX(uid) จะต้องส่งคืน uid นั้น ถ้าไม่ใช่เซิร์ฟเวอร์ MySQL ของคุณเสียอย่างมาก
Clive

ซึ่งจะเป็นไปได้ก็ต่อเมื่อมีการเรียกใช้ฟังก์ชันของคุณก่อนแทรกระเบียนสุดท้าย
ЕлинЙ

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

$ id ประกอบด้วย id ที่แทรกล่าสุดของตาราง แค่ทำ echo $ id


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.