PDA

View Full Version : insert در دوجدول مرتبط بهم



omidabedi
جمعه 09 خرداد 1393, 18:12 عصر
با سلام
از یک فرم در php سه تا داده دریافت میکنم که اینارو باید وارد جدول کنم به این صورت که

2تاش باید در یک جدول باشن و یکی دیگش در جدول دیگر که این دوجدول باهم رابطه دارن (جدول 1 و 2) .id در جدول 1 باید مثل t_id در جدول 2 باشه

چجوری insert بنویسم که مطمئن بشم هر دو رکورد همزمان و باهم و مرتبط بهم ایجاد میشن؟

میشه توی 2تا کوئری جداگانه نوشتش اما خب اینجوری شاید یه رکورد به جدول 1 اضاف بشه مابین اجرای این 2 کوئری

مهرداد سیف زاده
جمعه 09 خرداد 1393, 19:36 عصر
گرفتن last insert id میتونه کمکتون کنه. این تابع رو بعد درج در جدول اول میتونید توسط php یا خود mysql بدست بیارید. که البته دریافت اون توسط php بهتر و جواب درستی خواهد داد چون بصورت سریال بعد از درج همین رکورد کوئری زده میشه و آخرین id ثبت شده رو بهتون میدهو مخصوصا توسط pdo من تست کردم و جواب داده
last insert id در mysql (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id)
last insert id در php (http://www.php.net/manual/en/function.mysql-insert-id.php)

دیگه اگه خیلی حساس باشه باید transaction (http://www.linuxdig.com/news_page/1079394922.php) بزنی براش

omidabedi
جمعه 09 خرداد 1393, 20:23 عصر
گرفتن last insert id میتونه کمکتون کنه. این تابع رو بعد درج در جدول اول میتونید توسط php یا خود mysql بدست بیارید. که البته دریافت اون توسط php بهتر و جواب درستی خواهد داد چون بصورت سریال بعد از درج همین رکورد کوئری زده میشه و آخرین id ثبت شده رو بهتون میدهو مخصوصا توسط pdo من تست کردم و جواب داده
last insert id در mysql (http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id)
last insert id در php (http://www.php.net/manual/en/function.mysql-insert-id.php)

دیگه اگه خیلی حساس باشه باید transaction (http://www.linuxdig.com/news_page/1079394922.php) بزنی براش

ممنون از راهنماییتون
با یک کوئری میشه راه حل شماره یک یعنی اینکه بعد از درج در جدول شماره 1, id خونده بشه و رکوردی در جدول شماره 2 اضاف بشه اما خب ممکنه بین همین selectی ک انجام میشه یک رکورد درج بشه

transaction هم اره خوبه

ولی اینقد دیگه اسکریپتی که دارم مینویسم پربازدید نخواهد بود که نیاز باشه

بیشتر هدفم از ایجاد این تاپیک این بود ک ببینم راه حل استاندارد براش وجود داره یا خیر

متشکر:چشمک:

omidabedi
جمعه 09 خرداد 1393, 20:28 عصر
یه سوال دیگه

مدیریت خطاها در transaction چگونه خواهد بود؟
مثلا خب این کاری که میخوام انجام بدم اگر جدول ها relation داشته باشن خطا میده (که دارن) اما اگر نداشته باشن چی؟خطا نمیده و رکورد درج میشه درسته؟


mysql_query(begin)
mysql_query(delete from abc where id=2)
mysql_query(update abc where id=4)
if (mysql_error())
mysql_query(rollback)
else
mysql_query(commit)


طبق این نمونه

در کل چیزی هست که تضمین کنه id و t_id باهم یکسان هست و مرتبط بهم ایجاد شده؟