یکشنبه ۰۳ مرداد ۱۴۰۰

Sunday, July 25, 2021 GMT +4:30

» به روز رسانی ردیف ها در MySQL با UPDATE

mysql-update

یکی دیگر از دستورات مربوط به مدیریت اطلاعات در MySQL، دستور UPDATE است که پس از INSERT INTO و SELECT FROM می تواند بیشترین کاربرد را داشته باشد، فلسفه پیدایش و تعریف این دستور نیز به این جهت است که بتوانیم بدون حذف ردیف های موجود، اطلاعات آنها را به روز کنیم، به طور مثال فرض کنید اسامی افرادی را در یک جدول به همراه شماره تلفن آنها ذخیره کرده ایم و اکنون می خواهیم بدون اینکه ردیف مورد نظر حذف شود، تنها شماره تماس فرد را تغییر دهیم، یعنی اطلاعات قبلی مربوط به شماره تماس را حذف و اطلاعات جدید را جایگزین آن کنیم، در این گونه موارد است که دستور UPDATE کاربرد دارد، در ادامه به صورت جزئی تری با این دستور آشنا خواهیم شد.

شیوه نگارش (syntax) دستور UPDATE


شیوه نگارش (syntax) و نحوه استفاده از دستور UPDATE در MySQL بسیار ساده و کاربردی است، در واقع مانند سایر دستورهای مربوط به پایگاه داده، از جمله INSERT INTO و SELECT FROM، دستور UPDATE نیز از عناصر تعریف شده و خاص خود پیروی می کند که عبارتند از SET،UPDATE و WHERE، عنصر UPDATE بخش کلیدی پرس و جو، SET عملیات مورد نظر و WHERE ردیف هایی است که تحت تاثیر قرار می گیرند، به مثال زیر توجه کنید.
<?php
mysql_query("UPDATE tb_name SET tel_column='+98**********', age_column='33' WHERE user_column='ali'")
or die(mysql_error());
?>
در مثال بالا، از جدول فرضی tb_name، ستون های tel_column و age_column را به روز رسانی کردیم در جایی که ردیف یا ردیف های ستون user_column برابر مقدار فرضی ali باشد، به این ترتیب اطلاعات قبلی ذخیره شده در ردیف ها حذف و با مقادیر جدید به روز رسانی می گردند، بدون اینکه خود آن ردیف ها حذف شوند.
نکته: برای به روز رسانی چندین ستون با یک دستور UPDATE و جداسازی آنها، از علامت , به صورتی که در مثال آمده است استفاده کنید.

یک مثال کاربردی با دستور UPDATE


برای آشنایی بیشتر با کاربرد دستور UPDATE در MySQL، این قسمت از آموزش را با یک مثال کاربردی به پایان می بریم؛ فرض کنید اسامی کاربران سایت خود را در جدولی به نام users ذخیره کرده ایم که این جدول دارای چند ستون با نام های username، password، status و ... است، حال می خواهیم این امکان را به کاربران بدهیم تا بتوانند کلمه عبور خود را تغییر دهند، در چنین شرایطی می توان با استفاده از دستور UPDATE این کار را به راحتی انجام داد که در زیر یک نمونه از آن را ملاحظه می کنید.
<?php
$con = mysql_connect("localhost","root","")
or die(mysql_error());

mysql_select_db("test")
or die(mysql_error());

$update = mysql_query("UPDATE users SET password='$new_pass' WHERE username='$user_name' AND status='online'")
or die(mysql_error());

mysql_close($con);
?>
توضیح:
- دقت کنید، دستورات MySQL در اکثر مواقع، قبل از هر چیز باید توسط کدهای php کنترل شده و با هدف مشخصی استفاده گردند، به این معنی که هیچ زبان برنامه نویسی خود به خود نباید کاری انجام دهد بلکه تنها باید به عنوان یک ابزار در اختیار برنامه نویس باشد تا منظور او را به مفسر سیستم تفهیم کند، از این رو باید بدانید که کی و کجا از چه دستوری می توانید استفاده کنید، البته این موضوع تا حدود زیادی به تمرین و تجربه نیز بستگی دارد.
- پرس و جوی فرضی بالا اطلاعات کلمه عبور یک کاربر را به روز رسانی می کند، همان طور که ملاحظه می کنید از WHERE و AND برای اطمینان و محدودسازی ردیف های مورد نظرمان استفاده کرده ایم، همچنین از متغیرهایی برای مقادیر در دستور استفاده شده است که می توانند به فرض از یک فرم HTML و با متد POST دریافت شده باشند.
- همان طور که گفتیم، قبل از اجرای پرس و جوهای مربوط به دیتابیس، می توانید عملیات کاربر را با برنامه نویسی php کنترل و مدیریت کنید، به فرض از اعتبار سنجی با if و else یا isset استفاده کرده و سپس اجازه اجرای پرس و جو را بدهید، یا از دیگر قابلیت های php با توجه به هدف و برنامه خود استفاده کنید.
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» آموزش MySQL، سیستم مدیریت پایگاه داده
» اتصال PHP به MySQL با اکستنشن MySQLi
» محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
» استفاده از WHERE در پرس و جوی MySQL
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
commentنظرات (۳۷ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: mehdi
۰۳:۰۳ ۱۳۹۴/۰۵/۱۲
سلام
اگر چند تا فیلد داشته باشیم و بخواهیم آنها رو آپدیت کنیم چی ؟
مثلا شما یه پسورد داشتی که آپدیتش کردی حالا من چند تا فیلد نام و نام خانوادگی و . . . دارم که با توجه به کد ملی می خواهم آپدیتشون کنم .
اگر یه راهنمایی کنید ممنون می شم
پاسخ: 
سلام
اگر به مثال اول این آموزش دقت کنید، دو فیلد با علامت , از هم تفکیک شده اند، همین روال برای هر تعداد فیلد که داشته باشید می تواند استفاده شود (یعنی با علامت , جداسازی کنید).
نویسنده: امیرهادی
۱۴:۵۷ ۱۳۹۶/۰۴/۲۶
سلام به شما
دستوری هست که بعد از هر تغییر (مثلا UPDATE یا INSERT ) یک واحد به فیلد فرضی ID2 اضافه کند؟
مثلا ما یک فیلد ID داریم که بعداز INESERT کردن به صورت اتوماتیک یک واحد بیشتر میشود. ولی موقع UPDAT شدن بدون تغییر باقی میماند. الان میخوام یک فیلدر دیگر داشته باشم (مثلا ID2) که موقع آپدیت کردن هم افزایش پیدا کند. من الان موقع آپدیت سطرها، متغیر ID2 را دریافت میکنم و یک واحد بهش اضافه میکنم و دوباره به دیتابیس وارد میکنم.
دنبال دستورش هستم
پاسخ: 
با توجه به توضیحات باید سورس کدهای برنامه بررسی شوند، به همان صورت که در هنگام INSERT یک واحد به ستون مورد نظر اضافه می شود، می توان همان کد را در قسمت UPDATE نیز قرار داد، در واقع ظاهر کد در برنامه شما وجود دارد منتها باید آن را پیدا کنید و در قسمت UPDATE نیز درج نمائید که مستلزم تسلط بر PHP و MySQL است.
نویسنده: کاظم
۱۸:۱۶ ۱۳۹۶/۰۶/۲۳
سلام
ممنون
چطور میشه بعد از ویرایش در صفحه مربوطه کنار رکورد مورد نظر یه دکمه ظاهر بشه و همچنین رنگ رکورد تغییر یافته مثلا قرمز بشه و بعد از ok کردن دکمه رنگ سبز بشه ؟
پاسخ: 
این موارد باید با برنامه نویسی اعمال شوند، متاسفانه توضیح ساده و کوتاهی قابل ارائه نیست!
نویسنده: om
۱۱:۵۷ ۱۳۹۷/۰۴/۰۳
سلام .
ببخشید من برای طراحی سایت صرافی نیاز دارم تا یک لینکی به یکی از کاربران بدم تا بدون نیاز به وارد شدن در پنل وردپرس و .... این امکان رو داشته باشه تا با وارد کردن پسورد قیمت ارزها رو از طریق اون فرم بتونه تغییر بده.
امکانش هست راهنمایی بفرمایید چگونه این کار ممکنه؟
پاسخ: 
قاعدتا برای این کار باید کدنویسی کنید! یعنی یک برنامه کوچک با فایل های جداگانه بنویسید که از دیتابیس وردپرس استفاده کند، اگر کاربر وارد این برنامه نشده باشد، فرم ورود را نمایش دهید و اگر کوکی و سشن معتبر باشد، فرم ویرایش را در خروجی داشته باشید، پس از ارسال فرم نیز ردیف های مد نظر با مقادیر ارسالی کاربر به روز شوند.
نویسنده: مصطفی
۱۴:۳۴ ۱۳۹۸/۰۹/۰۶
سلام . وقتی داریم یک رکورد رو آپدیت میکنیم ، چطوری بفهمیم کدوم ستون ها داره آپدیت میشه و اونارو بفرستیم به یک view ؟
پاسخ: 
منظورتان دقیقا مشخص نیست؟! قاعدتا ستون ها در پرس و جوی UPDATE مشخص هستند اما اگر منظور دریافت آخرین ردیف هایی است که با دستور جاری آپدیت شده اند تا آنجا که اطلاع داریم MySQL متدی برای این منظور در نظر نگرفته و در واقع نتیجه هر پرس و جو به محض اتمام اجرا به مفسر PHP برگردانده می شود و تنها در این لحظه می توانیم تعداد نتیجه را با متدهایی مانند mysqli_affected_rows دریافت و چاپ کنیم، با توجه به این حالت یا باید پرس و جوی آپدیت هر ردیف به صورت جداگانه (به فرض در حلقه for یا foreach) اجرا شود، یا با یک پرس و جوی SELECT دیگر وضعیت آخرین آپدیت ستون ها به فرض با در نظر گرفتن ستون تاریخ و زمان دریافت شود.
نویسنده: fahimeh
۱۴:۳۰ ۱۳۹۹/۰۷/۱۲
سلام
من دارم پروژه واسه دانشگاه مینویسم طراحی سایتو کردم
برای کار با پایگاه داده دستور insert و delete کار میکنه ولی دستور update رو نمیدونم چجوری بنویسم؟ برای دستور insert هم موقع نمایش پست ها توی صفحه هر سطر جدول رو 8 بار نشون میده!
میشه لطفا راهنماییم کنید
پروژم و پایگاه داده رو بفرستم؟
پاسخ: 
می توانید فایل های قابل تست پروژه را به صورت فشرده (فرمت zip) به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا بررسی کنیم.
نکته: تنها در صورتی کدهای برنامه اصلاح می شوند که این کار خیلی زمانبر نباشد.
نویسنده: Fari
۰۷:۴۷ ۱۴۰۰/۰۴/۰۲
سلام
یک سوال، ممنون میشم کمکم کنید
اگر بخوایم موقع ثبت نام یک کاربر با کد معرفی یک شخص (سرگروه) چک بکنیم که مثلا کاربر a با کد معرفی کاربر b ثبت نام انجام داده وقتی که اطلاعات کاربر b رو اینسرت کردیم در فیلدهای مربوط به کاربر سرگروه یا همون کاربر b فیلد تعداد زیر مجموعه آپدیت بشه و تعداد زیر مجموعه اون رو یک عدد افزایش بده باید چیکار بکنیم؟
پاسخ: 
بستگی دارد ساختار کدنویسی برنامه و جداول دیتابیس را به چه نحوی پیاده سازی کرده باشید، یک حالت می تواند به این شکل باشد که در جدول سرگروه اسامی سرگروه ها وجود دارد (به فرض جدول tbl_1 و کاربر b)، جدول tbl_1 ستون هایی به نام col_name از نوع VARCHAR و col_count از نوع INT دارد، اسامی کاربران نیز در جدول دوم به فرض tbl_2 ذخیره می شود و این جدول هم ستونی با نام col_parent از نوع VARCHAR دارد که کاربر سرگروه را در صورت وجود در آن درج می کنیم، برای افزایش یک واحد به ستون col_count اگر در مرحله INSERT اطلاعات کاربر جدید، سرگروه در دسترس باشد (روش بررسی اینکه کاربر سرگروه دارد یا خیر بستگی به برنامه دارد به فرض ممکن است از فرم HTML سرگروهی انتخاب شده باشد یا در جدولی جداگانه اسامی سرگروه و کاربران زیرمجموعه آن از قبل ثبت و SELECT شده باشد) در این حالت می توانیم با اجرای نمونه پرس و جوی زیر مقدار ستون col_count را یک واحد افزایش دهیم:
UPDATE tbl_1 SET col_count = col_count + 1 WHERE col_name = 'b' LIMIT 1
قاعدتا نام سرگروه باید به صورت متغیر در کدها جایگزین و امنیت پرس و جو نیز به روش های ممکن حفظ شود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





2 × 7
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form آی تی
در:
ممنون آینده کاری پی اچ پی خوبه یا جاواسکریپت؟
۱۴۰۰/۰۴/۳۰

form رضا
در:
با عرض سلام و خسته نباشید ایا امکان این قضیه در outlook وجود دارد که ما ادرس فرستنده را از طریق آن بتوانیم پیدا...
۱۴۰۰/۰۴/۳۰

form محمود
در:
سلام مهندس چگونه می شود میزان حرکت اسکرول را تعیین کرد. یعنی با یه حرکت غلطک موس صفحه بعدی در کادر قرار بگیرد....
۱۴۰۰/۰۴/۳۰

form محمد
در:
سلام خیلی خیلی ممنون تشکر
۱۴۰۰/۰۴/۲۷

form محمود
در:
سلام چگونه حاشیه های ناتمام ایجاد کنیم. یعنی تمام دور کادر کامل نباشد و بردر دور کادر ناقص باشد. مثلن بردر سمت راست تا...
۱۴۰۰/۰۴/۲۷

form محمد
در:
سلام ببخشید من با curl میخواستم فایلی رو با api بفرستم ولی جواب نداد اگر امکانش هست تصحیحش کنید:
۱۴۰۰/۰۴/۲۷

form برنامه نویس
در:
سلام و عرض ادب خدمت استاد. یه سوال خدمت شما داشتم. چطور می تونیم از ادیتور مثل ckeditor یا tinymsc به جای textarea...
۱۴۰۰/۰۴/۲۷

form جواد
در:
با سلام من دانشی از برنامه نویسی ندارم ، میشه برنامه ای نوشت که آدرس یک صفحه بعد از لاگین شدن بهش داد و هر...
۱۴۰۰/۰۴/۲۱

form علی
در:
سلام خوبین؟ من میخوام برای وبلاگم سبد خرید بزنم ولی php و ........ بلد نیستم اگه برام درست کنین ممنونتون میشم
۱۴۰۰/۰۴/۱۹

form سینا الف
در:
باسلام! من از این آموزش‌ سایت‌تون هم خیلی استفاده کردم. ضمن تشکر صمیمانه از مدیریت وبگو بابت مطالب مفید و کاربری اش، سوالی درباره...
۱۴۰۰/۰۴/۱۸

form محمود
در:
سلام و تشکر از کمک های قبلی تان. در بخش بالا قسمت «تغییر رنگ پس زمینه با کلیک کاربرم» را خوندم . ولی کد...
۱۴۰۰/۰۴/۱۸

form محمود
در:
با سلام دوباره نمونه کدی که برای افکت پس زمینه چراغ پلیس و صدا قرار دادین خیلی خوب کار میکند و بسیار سپاس ....
۱۴۰۰/۰۴/۱۴

form احمد
در:
سلام خسته نباشید من یه کد نوشتم که قیمت کالا ها و نام کالا ها رو از یه صفحه برام استخراج کنه و بصورت جدول...
۱۴۰۰/۰۴/۱۴

form محمود
در:
سلام و عرض ادب چگونه می شود با کلیک روی یک متن ، کل پس زمینه در یک آن چشمک بزند یعنی رنگ...
۱۴۰۰/۰۴/۱۱

form مجید
در:
سلام. من برنامه ای دارم که بر اساس php و mysql کار میکنه. بهش 100 جمله میدم و جملات رو تصادفی نمایش میده. حالا میخام...
۱۴۰۰/۰۴/۱۰

form Amir
در:
خیلی عالی بود
۱۴۰۰/۰۴/۱۰

form Amir
در:
سلام ببخشید یک کانال تلگرامی است که سیگنال میده و شرطی اینکه در آلپاری و لایت فارسی حساب داشته باشی و تحت ای پی آنها...
۱۴۰۰/۰۴/۱۰

form مجید
در:
خیر ببینی جوون - این اسکرول افقی کلی اعصاب رو بهم ریخته بود .
۱۴۰۰/۰۴/۰۷

form جین مین
در:
با سلام و وقت بخیر من تمام مراحل رو به نظر خودم درست انجام دادم و فایل هم دانلود میشه اما مشکل اصلی اونجاست...
۱۴۰۰/۰۴/۰۶
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.