گرفتن ای در فرمان اینسرت شده

memeri

Member
سلام دوستان
من می خواهم ببینم چه جوری می شه وقتی یه خط جدید رو تو mysql insert کردیم اون آی در اون خطر رو بدست بیاریم(جدول یه فیلد آی دی داره)
 

memeri

Member
مثلاً یه جدول این طوری داریم:

کد:
create table connect1 (
id INT NOT NULL AUTO_INCREMENT,
      PRIMARY KEY(id),
 ip VARCHAR(255) null)
حالا یه کد php به این صورت داریم
PHP:
<?php
$res=mysql_query("insert into connect1 (ip) values ('$ip')",$conn);
?>
حالا می خواهم ببینم این خطی که اینسرت کردم آی دیش چی شده؟
 

memeri

Member
خوب من از کجا بدونم تو این مقطع زمانی یه اینسرت دیگه انجام نشده؟؟؟؟
می خواستم ببینم برای این کار تابعی وجود نداره
 

jhoseini

Member
اگه به این تابع اعتماد ندارید، بهتره خودتون با یه select پیداش کنید
PHP:
$res=mysql_query("insert into connect1 (ip) values ('$ip')",$conn); 
$chk=mysql_query(" select id from connect1 order by id desc limit 1  ");
if(mysql_num_rows($chk)){
  $id=mysql_result($chk,0,0);
} else {
  // :-??
}
 

tabib_m

Member
خوب من از کجا بدونم تو این مقطع زمانی یه اینسرت دیگه انجام نشده؟؟؟؟
منظورم از آخرین اینسرت، آخرین اینسرتی که توی همین اجرای صفحه انجام شده. مثلا:
کد:
$q1=mysql_query("insert into .....");

$q2=mysql_query("insert into .....");

$q3=mysql_query("insert into .....");

$q4=mysql_query("insert into .....");

$q5=mysql_query("insert into .....");
اگر من تابع مورد نظر رو بعد از هر کدوم از این اینسرت ها به کار ببرم،خروجی تابع آی دی ای هست که توی رکورد مورد نظر ثبت شده!

اگه به این تابع اعتماد ندارید، بهتره خودتون با یه select پیداش کنید
به این کار هیچ اعتمادی نمیشه کرد . اصلا نباید اعتماد کرد.
چون این کد صرفا بزرگترین آی دی (تقریبا همون آخرین آی دی) ای که ثبت شده رو بر میگردونه، و ممکنه این رکوردی که الان اینسرت شد، قبل از این که آی دی مورد نظر به دست بیات، ده تا رکورد دیگه هم اینسرت بشه، اونوقت نتیجه اشتباه خواهد شد.

موفق باشید.
 

jhoseini

Member
به این کار هیچ اعتمادی نمیشه کرد . اصلا نباید اعتماد کرد

اگر همیشه از این تابع برای بدست آوردن id استفاده بشه، میشه بهش اعتماد کرد
اما به این کد به همون اندازه میشه اعتماد کرد که به mysql_insert_id، چون جفتشون یه کارو انجام میدن
به هر حال، من تا حالا از هیچکودومشون بدی ندیدم که بخام اعتماد نکنم
electricf.gif
 
آخرین ویرایش:

tabib_m

Member
اما به این کد به همون اندازه میشه اعتماد کرد که به mysql_insert_id، چون جفتشون یه کارو انجام میدن
اشتباه نکنید :)

اگر فرضا کاربر a و کاربر b همزمان در سایت هستن و در حال مشاهده ی یک صفحه هستن که در ابتدای اون صفحه عمل insert انجام میشه، برای مثال ممکنه عمل اینسرت برای کاربر a انجام بشه ، بعد در مدت زمانی که شما میخوای آی دی رکورد ثبت شده رو به دست بیاری، عمل اینسرت برای کاربر b هم انجام بشه، در این صورت الان دو تا رکورد به دیتابیس اضافه شده ، و حالا قراره محاسبه بشه که چه آی دی ای ثبت شده. طبیعتا نتیجه برای هر دو کاربر یکی خواهد شد! چون کدی که شما گذاشتی فقط و فقط بزرگترین آی دی ثبت شده رو محاسبه میکنه و نتیجه میده.
اما
mysql_insert_id کاری به آی دی بزرگتر ، کوچیکتر، زودتر و دیرتر نداره! و صرفا همون اینسرتی که برای هر کاربر به صورت جداگانه انجام شده رو دقت میکنه و آی دی ای که ثبت شده رو به برنامه بر میگردونه! در این صورت در هر کدوم از اجراهای صفحه ی مورد نظر، به ازای هر کاربر، آی دی مربوط به اون کاربر براش نمایش داده میشه!

امیدوارم منظورم رو فهمیده باشی.

موفق باشید.
 

jhoseini

Member
خوب این دو دستور insert و select پشت سر هم انجام میشه، و فکر نمیکنم زمان دلچسبی طول بکشه
297.gif

به هر حال، من فقط خاستم راه دومی نشون دوست گرامی بدم
laie_14.gif
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا