سؤال

هل أنا صحيح في فهم أن وظيفة Last_insert_id (Hysql Last_insert_id () لا إعادة تعيين بين محاولات إدراج (كما يفعل الهوية في SQL-Server) ... أنه في حالة فشل عملية الإدراج السابقة مباشرة، سيعود Last_insert_ID () PK PK من هذا الاتصال الأخير إدراج أي الجدول مع مفتاح الأساسي المتزايد التلقائي كان. وإذا كنت صحيحا في هذا الأمر، فهل لا يبدو هذا مثل السلوك الأكثر تخلفا لهذه الوظيفة التي يمكن أن يأتي بها المرء؟ لا يوجد وظيفة MySQL التي تتصرف بالمثل لهوية SQL-Server؟ واحد سيعود فارغة إذا كان السابقة مباشرة إدراج محاولة لا يخلق أي سجل جديد؟ بدلا من ذلك، كيف يعرف المرء بيقين على المفتاح الأساسي لأحدث عملية إدراج؟

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

المحلول

Identity عادة ما تكون مخطئة في خادم SQL أيضا. يجب أن تستخدم scope_identity() في معظم الحالات بدلا من ذلك.

في MySQL، يجب أن يكون Last_insert_id () آمنا للاستخدام لأن الطريقة الوحيدة التي يمكنك استدعاء هذه الوظيفة بعد خطأ إدراج هل تم القبض عليه بشكل صحيح بالفعل ومحسنا خطأ الإدراج. وإلا فإنك لا تزال تعالج الأوامر. بمعنى آخر، Last_insert_id () ليس آلية معالجة الأخطاء الخاصة بك.

نصائح أخرى

يجب عليك التحقق لمعرفة ما إذا كان الإدراج ناجحا أولا. إذا كان الإدراج ناجحا، فيمكنك الاعتماد على last_inster_id ().

تحرير: في PHP:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
  $last_id=mysql_insert_id();
}else{
  //panic!
}
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top