سؤال

لدي استفسار قد يكون أعدم من قبل العديد من المستخدمين على التوالي.أنا خائف أنه إذا كنت تشغيل db_last_insert_id الأمر بعض المستخدمين قد لا تحصل على الماضي إدراج معرف بسبب التزامن.ولكن وفقا: http://api.drupal.org/api/function/db_last_insert_id/6, ، فإنه يشبع:

يعود آخر إدراج معرف.هذه هي وظيفة الخيط آمنة.

سؤالي هو كيف يتم هذا الموضوع آمنة ؟ رمز فقط:

<?php
  function db_last_insert_id($table, $field) {
   return db_result(db_query("SELECT CURRVAL('{". db_escape_table($table) ."}_". db_escape_table($field) ."_seq')"));
  }
?> 

أنا لا أرى أي شيء عن تأمين الجداول أو لا شيء ؟

هل كانت مفيدة؟

المحلول

باستخدام MySQL (كما يبدو أنك تشير العلامات على سؤالك), وظيفة db_last_insert_id() يتم تعريف هذه الطريقة :

function db_last_insert_id($table, $field) {
  return db_result(db_query('SELECT LAST_INSERT_ID()'));
}

في database.mysql-common.inc


و LAST_INSERT_ID() يعتمد على الاتصال (نقلا عن التشديد من الألغام) :

الهوية التي تم إنشاؤها هو في الحفاظ على الخادم في اتصال أساس.وهذا يعني أن القيمة التي تم إرجاعها بواسطة الدالة معين العميل هو أول AUTO_INCREMENT القيمة الناتجة عن أحدث بيان تؤثر على AUTO_INCREMENT عمود من قبل العميل.هذه القيمة لا يمكن أن تتأثر أخرى العملاء, حتى لو أنها تولد AUTO_INCREMENT القيم الخاصة بهم.هذا السلوك يضمن كل عميل يمكن استرداد الخاصة بدون معرف الاهتمام النشاط الأخرى العملاء, و دون الحاجة إلى أقفال أو المعاملات.

لذا أود أن أقول أن هذا هو تماما موافق على الخلية ;-)


التعريف الخاص بك وشارك هو في الواقع واحدة تستخدم كيو :

function db_last_insert_id($table, $field) {
  return db_result(db_query("SELECT CURRVAL('{". db_escape_table($table) ."}_". db_escape_table($field) ."_seq')"));
}

في database.pgsql.inc


من pgsql دليل على تسلسل (نقلا ;التشديد من الألغام) :

currval

إرجاع القيمة الأكثر مؤخرا التي تم الحصول عليها من قبل nextval على هذا التسلسل في الدورة الحالية.(خطأ ذكرت إذا nextval أبدا ودعا هذا التسلسل في هذا الدورة.) لاحظ أن لأن هذا هو تعود الدورة المحلية القيمة ، ذلك يعطي يمكن التنبؤ بها الإجابة على ما إذا كان أو لا دورات أخرى أعدمت nextval منذ الدورة الحالية لم.

اعتقد هذا هو تماما موافق أيضا على الإنترنت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top