PDA

View Full Version : سوال: دریافت id همان سطری از اطلاعات که به بان ارسال میکنیم؟!!



fazelit
چهارشنبه 01 دی 1389, 23:41 عصر
با سلام خدمت دوستان من نمی دونم سوالم رو چطور بیان کنم :ناراحت::ناراحت:
اما میگم امید وارم منظورم رو بفهمید:
من یه سری اطلاعات رو با کد زیر در بانک اطلاعاتیم ذخیره میکنم


$q="INSERT INTO `polls_question` (`question`,`active`) VALUES ('{$_POST['question']}','{$_POST['active']}')";
if(!empty($q))$in=mysql_query($q);


در جدول polls_question علاوه بر فیلد `question`,`active` یه فیلد id هم داریم که اتوماتیک شماره بهش میده،

سوال من اینه که من می خوام در سطر بعد id که به این اطلاعاتی که ذخیره کردم اختصاص داده رو توی یک متغیر بریزه؟ چطوری میشه id ذخیره شده بدست اورد؟
فکر کنید اینقدر اعضا زیاد هستند که شاید در 1 ثانیه 100 نفر همزمان دارن اطلاعات ذخیره میکنند.

HRezaei
پنج شنبه 02 دی 1389, 00:04 صبح
اینو سرچ کن: LAST_INSERT_ID
اینم ببین:
http://php.net/manual/en/function.mysql-insert-id.php

mohsen6500
پنج شنبه 02 دی 1389, 00:15 صبح
من دقیقا متوجه نشدم چی شد
اگه میخوای آی دی رو صدا بزنی که با همون سلکت صداش بزن دیگه
میشه کدت رو به طور کامل بنویسی؟!

Keramatifar
پنج شنبه 02 دی 1389, 01:37 صبح
این فرمان ID آخرین رکورد Insert شده در دیتابیس را بر می گرداند:
mysql_insert_id (http://www.php.net/manual/en/function.mysql-insert-id.php)

fazelit
پنج شنبه 02 دی 1389, 07:34 صبح
من دقیقا متوجه نشدم چی شد
اگه میخوای آی دی رو صدا بزنی که با همون سلکت صداش بزن دیگه
میشه کدت رو به طور کامل بنویسی؟!
ضمن عرض سلام بر دوستان و تشکر از آنهایی که تا حدودی من رو راهنمایی کردند. اما شما در واقع اطلاعات آخرین رکورد رو سلکت می کنیم و بعد آی دی رو بدست میاریم. اما سوال اصلی من این هستش که بین خط اول که ذخیره در بانک هستش یعنی :

$q="INSERT INTO `polls_question` (`question`,`active`) VALUES ('{$_POST['question']}','{$_POST['active']}')";
if(!empty($q))$in=mysql_query($q);
و خط بعد که میایم آی دی آخرین رکورد رو ذخیره میکنیم مثلا با دستور
mysql_insert_id


حالا فکر کنید اینقدر مراجعه کننده زیاد باشه که همزمان 1000 اطلاعات رکورد میشه وقتی که php کد اول رو اجرا میکنه برای نفر x در همان زمان چون مراجعه کننده زیاد هستند نفر y هم به کد اول رسیده و هر دو اطلاعاتشون ذخیره شده حالا php که میره سراغ خط دوم یعنی بازیابی آخرین id ذخیره شده برای فرد x اما با این مثال آخرین id ذخیره شده در بانک اطلاعاتی مربوط به فرد y هستش نه x پس id که تحویل فرد x میده مربوط به فرد y هستش برای اینکه این مشکل پیش نیاد باید چه کار کرد؟

xoogle.ir
پنج شنبه 02 دی 1389, 10:10 صبح
فکر نمیکنم حتی در صورتی که مراجعه کننده زیاد باشه با تابع mysql_insert_id به مشکل بخورید چون این عملیات در سطح صدم ثانیه انجام میشه.

اما به هرحال اگر جدول شما جوری هست که بتونید آخرین آیدی رو به صورت مطمئن select کنید از این روش هم میتونید استفاده کنید.


mysql_query("select id from tables where user_id='$user_id' order by time desc limit 0,1");

یا یک چیزی شبیه به این.

mtchabok
پنج شنبه 02 دی 1389, 10:52 صبح
سلام
برای حل این مشکل دو راه حل وجود داره .
1- این راه حل آسونتره که دوستان گفتن که می تونی از تابع mysql_insert_id استفاده کنی .
2- این راه حل کمی سرعت سرور رو پایین می آره ولی جواب درستی و کاملی رو میگیری با هاش ... روشش اینه که همون اطلاعاتی رو که اینزرت میکنی به جدولت رو بعد از اینزرت کردن select بکن . همین .

در مورد راه حل اول هم باید بگم که اصلا یه چنین اتفاقی که گفتید نمی افته مگر اینکه شما بخواهید از اتصال ثابت به سرور mysql استفاده کنید و در غیر اینصورت چونکه برای هر درخواست شما یک اتصال میسازید و تابع mysql_insert_id هم از آخرین اتصال و یا از اتصال تعریف شده ، آخرین ID رو میگیره به همین دلیل اصلا مشکلی برای برگشت ID تون بوجود نمی آد .
موفق باشی

fazelit
شنبه 04 دی 1389, 09:04 صبح
سلام
برای حل این مشکل دو راه حل وجود داره .
1- این راه حل آسونتره که دوستان گفتن که می تونی از تابع mysql_insert_id استفاده کنی .
2- این راه حل کمی سرعت سرور رو پایین می آره ولی جواب درستی و کاملی رو میگیری با هاش ... روشش اینه که همون اطلاعاتی رو که اینزرت میکنی به جدولت رو بعد از اینزرت کردن select بکن . همین .

در مورد راه حل اول هم باید بگم که اصلا یه چنین اتفاقی که گفتید نمی افته مگر اینکه شما بخواهید از اتصال ثابت به سرور mysql استفاده کنید و در غیر اینصورت چونکه برای هر درخواست شما یک اتصال میسازید و تابع mysql_insert_id هم از آخرین اتصال و یا از اتصال تعریف شده ، آخرین ID رو میگیره به همین دلیل اصلا مشکلی برای برگشت ID تون بوجود نمی آد .
موفق باشی

ضمن عرض تشکر از پاسخ تون من فقط یک مطلب متوجه نشدم اون هم اتصال ثابت به سرور mysql
یعنی چی؟ و چطور اتصال ثابت انجام میگیره یا اتصال غیر ثابت باشه؟

mtchabok
شنبه 04 دی 1389, 10:02 صبح
سلام
در توابع php به صورت می تونی یک اتصال رو با mysql ایجاد کنی یکیش که توسط تابع mysql_connect ایجاد میشه که معمولا همه از این تابع استفاده می کنیم ولی یک تابع دیگه ای هم وجود داره که برای اتصال ثابت هست و اونم mysql_pconnect هست .
حالا اتصال ثابت چیه ؟
اتصال ثابتی اتصالی هست که فقط یک بار ایجاد میشه و برای تمامی درخواستها از همون اتصال استفاده میشه . البته معمولا در سرورها این تابع بسته هست و دسترسی بهش نداریم و اونم به دلیل همون ثابت بودن چونکه دائم یک اتصال باز روی سرور mysql قرارمیگیره .
برای اطلاعات بیشتر می تونی سری به این آدرس بزنی : mysql_pconnect (http://ir.php.net/manual/en/function.mysql-pconnect.php)
موفق باشید