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

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 مطالب بیشتر:
» استفاده از WHERE در پرس و جوی MySQL
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
» محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
» آموزش MySQL، سیستم مدیریت پایگاه داده
» ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
commentنظرات (۳۷ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: sajadpm
۱۵:۵۰ ۱۳۹۱/۰۸/۱۵
با سلام و خسته نباشید مثل همیشه مطالبتون عالی هست فقط یک سوال پیش اومده برام مثلا من می خواهم یک مقدار رو به اون ستون اضافه کنم یعنی table امتیاز 5 هست و بعد با آپدیت 1 امتیاز دیگر آن اضافه بشه مثلا بشه امتیاز + یک چگونه امکان پذیر است؟ پیشاپیش تشکر
پاسخ: 
سلام
اگر درست متوجه سوال شما شده باشیم، ابتدا باید مقدار فعلی ستون مورد نظر را با SELECT و تابع mysql_fetch_array فراخوانی کنید (به آموزش های گذشته مراجعه نمائید)، سپس مقدار ستون را با مقادیر یک جمع کرده و حاصل را با update در ستون به روزرسانی کنید.
نویسنده: امیر
۱۰:۳۸ ۱۳۹۲/۰۳/۰۲
سلام
من مشکلی با آپدیت کردن ندارم اما برای مشاهده ی اطلاعات آپدیت شده من باید هر باز صفحه رو رفرش کنم
. که این خیلی برام آزار دهنده است با php هم کار می کنم . آیا راهی هست که بشه این مشکل رو حل کرد مثلا یه تایمر جاوا اسکریپتی باشه که فقط کد های php رو بروز کنه؟
پاسخ: 
سلام
باید از آژاکس (Ajax) و ترکیب آن با PHP استفاده کنید که خود آموزش های جداگانه دارد.
نویسنده: امیر
۱۱:۰۰ ۱۳۹۲/۰۳/۰۲
ممنون از سایت خوبتون آموزش آژاکس تون همه چیز رو برام روشن کرد ممنون از سایت کاربردی و جالبتون
نویسنده: پارسا
۲۳:۲۰ ۱۳۹۲/۰۵/۰۲
سلام
میخوام فیلدهای موجود در دیتابیسم و نمایش بدم به صورت text که بتونم ویرایش کنم و اطلاعات ویرایش شده رو دوباره در دیتابیس ذخیره کنم؟؟؟
ممنون میشم کمکم کنید؟؟
پاسخ: 
سلام
اطلاعات را از دیتابیس SELECT و نتیجه را به متغیرها مقداردهی کنید، سپس در هنگام ایجاد خروجی، در قسمت value فیلدها جایگزین نمائید، در نهایت و پس از ویرایش موارد مد نظر، از UPDATE (در دستور MySQL) استفاده کرده و مقادیر ستون ها را به روز کنید.
نویسنده: Arman
۱۶:۵۸ ۱۳۹۲/۰۷/۲۲
با سلام خدمت شما استاد گرامی .
میتونید یه مثال از همین دستور UPDATE بزنید .
ببینید من میخوام اطلاعات رو به صورت تکست مشاهده کنم و بتونم اونها رو ویرایش کنم .
مثلا من اطلاعاتی مانند : نام , نام خانوادگی , و ... یک فرد رو بتونم بخونم و هم ویرایش کنم .
اگر میشه یه مثال خوب بزنید .
پاسخ: 
سلام
همان طور که در پاسخ یادداشت بالا اشاره شده، باید ابتدا موارد را SELECT کنید، آنها را به متغیرهایی در PHP نسبت دهید و در هنگام چاپ فرم HTML، در قسمت value فیلدها، مقادیر متغیرها را خروجی دهید، سپس بعد از ویرایش، می توانید مجددا فرم را به یک فایل دیگر (یا همان فایل) ارسال کرده و فرآیند UPDATE را انجام دهید (باید با نحوه کار SELECT و همچنین فرم های وب آشنا باشید).
نویسنده: Arman
۱۲:۴۶ ۱۳۹۲/۰۷/۲۴
سلامی دوباره خدمت شما استاد گرامی
بنده کارهایی که شما گفتید رو انجام دادم .
کد :
<?php
mysql_connect("localhost", "et", "********")//اطلاعات اتصال
or die(mysql_error());

mysql_select_db("et")//نام دیتابیس
or die(mysql_error());

@$etchat_userpw = $_POST['etchat_userpw'];

$result = mysql_query("SELECT * FROM db1_etchat_user WHERE etchat_user_id = '3' ")
or die(mysql_error());// انتخاب از جدول

//گرفتن خروجی از اطلاعات فیلدها با mysql_fetch_array
while ($row = mysql_fetch_array($result)){
$etchat_userpw = $row['etchat_userpw'];
$etchat_user_id = $row['etchat_user_id'];
}

$update = mysql_query("UPDATE db1_etchat_user SET etchat_userpw='$etchat_userpw' WHERE etchat_user_id = '3' ")
or die(mysql_error());

mysql_close;//پایان ارتباط
?>
<form action="update.php" method="post">
<input name="etchat_userpw" type="password" value="<?php echo $etchat_userpw; ?>" type="text">
<input type="submit">
</form>
بنده در اینجا اومدم اطلاعات آی دی شماره 3 رو بیرون کشیدم و با دستور آپدیت پسورد این آیدی رو ویرایش می کنم.
اما نمیدونم چرا وقتی بر روی submit کلیک می کنم پسورد آپدیت نمیشه و همون پسورد قبلی دوباره به نمایش در میاد .
ممنون میشم کمکم کنید .
پاسخ: 
سلام
مشکل کد شما این است که متغیر etchat_userpw که از طریق متد POST ست می شود با متغیری که از طریق SELECT و در حلقه while مقداردهی می شود، هم نام است، در نتیجه ابتدا قسمت POST اجرا و مقادیر از فرم گرفته می شود، اما در ادامه و قبل از به روزرسانی، مجدد متغیر با مقادیر دیتابیس جایگزین و سپس همان مقدار UPDATE می شود!
نویسنده: Arman
۱۵:۰۴ ۱۳۹۲/۰۷/۲۴
خیلی ممنون از پاسخگویی خوب و سریعتون .
نویسنده: Arman
۱۵:۲۸ ۱۳۹۲/۰۷/۲۴
سلامی دوباره .
ببخشید که من زیاد سوال میپرسم :|
مشکل قبلی به لطف شما حل شد .
الان یه مشکل دیگه پیش اومده .
وقتی که پسورد عوض میشه اول پسورد قبلی رو روی input نشون میده یا وقتی دوباره عوض میکنی یا صفحه رو رفرش میکنی بعد پسورد جدید رو نشون میده .
دلیلش چی میتونه باشه ؟
پاسخ: 
سلام
باید معنی و نحوه کار دستوراتی که می نویسید را بدانید، چون مفسر PHP هیچ کاری را بی دلیل انجام نمی دهد! به نظر نیاز به مطالعه بیشتر مباحث مقدماتی دارید،
در مورد مشکل اخیر، چون دستور UPDATE بعد از SELECT اجرا می شود، لذا با ارسال فرم، ابتدا پسورد قبلی انتخاب شده (در متغیر ذخیره) و در ادامه مقادیر پسورد جدید در دیتابیس جایگزین می شود، به همین خاطر در فرم همان مقدار قبلی نمایش داده شده و با رفرش، مجددا پسورد آپدیت شده انتخاب می شود و...
نویسنده: Arman
۱۵:۴۱ ۱۳۹۲/۰۷/۲۴
آقا مشکل حل شد .
نویسنده: مجید
۰۲:۰۳ ۱۳۹۲/۰۸/۱۹
سلام چطور میشه از دیتابیس ساخته شد نسخه ی پشتیبان تهیه کرد طوری که اطلاعاتی از دست نره
پاسخ: 
سلام
این کار هم از طریق برنامه phpMyAdmin و هم از طریق نرم افزار مدیریت هاست مانند cPanle امکانپذیر است.
نویسنده: مصطفی
۰۰:۲۴ ۱۳۹۲/۰۸/۳۰
سلام و تشکر از سایتتون
من یه رویداد زمانی (event) داخل پایگاه طراحی کردم که 1 ساعت بعد از فرستادن درخواست آژاکسی به سرور انجام میشه ولی می خوام زمانی که باقی مونده تا رویداد اتفاق بیفته در مرورگر نمایش داده بشه البته می تونم با تابع setTimeout در جاوا اسریپت چنین کاری بکنم ولی مساله اینجاست که اگه کاربر مرورگر رو ببنده و دوباره باز کنه این تابع از دوباره شروع میشه. اگه کمکم کنید ممنون میشم
پاسخ: 
سلام
راه حل این کار ثبت تاریخ اجرای رویداد در یک ستون دیتابیس است، سپس هر زمان که کاربر صفحه را بارگذاری می کند، به صورت آژاکسی یا حالت معمولی می توانید زمان فعلی را با زمان رویداد مقایسه و اختلاف را به دست آورید، اگر هم به صورت شمارنده معکوس بخواهید طراحی کنید، باید جاوا اسکریپت را نیز با این شیوه ترکیب نمائید.
نویسنده: مصطفی
۲۰:۱۶ ۱۳۹۲/۰۸/۳۰
متوجه مطلبتون شدم فقط چطور باید نتایج رویداد را در یک فیلد جدول قرار بدم
پاسخ: 
در قسمت event definition یا event body می توانید پرس و جوهای مد نظرتان را قرار دهید که قاعدتا می تواند شامل دستورات INSERT UPDATE SELECT و... باشد.
نویسنده: mohsen
۲۲:۱۵ ۱۳۹۲/۰۹/۱۱
با سلام و تشکر از سایت خوبتون
من کلا تو یه زمینه ای ایراد دارم
میخوام با گذر مثلا یه ثانیه به یه متغیری یه مقدار خاص مثلا 10 تا اضافه بشه میشه کمکم کنین بگین چطوری میشه همیچین کدی نوشت؟ هر کار میکنم با این تابع Date بازم نمیشه من از برنامه نویسی سر در میارم ولی نمیدونم این کار هیچ جوری نمیشه! اگه بندازمش تو یه ساختار تکرار بازم نمیشه برنامه ارور میده! کمک کنین خواهشا
فقط سریع
بازم ممنون
پاسخ: 
سلام
لطفا سوالتان را دقیق تر مطرح کنید!
از تابع PHP استفاده می کنید یا JavaScript و یا MySQL؟ منظور از به روزرسانی متغیر مشخص نیست (متغیر در جاوا اسکریپت، PHP یا مقادیری در MySQL)؟
نویسنده: mohsen
۲۱:۲۶ ۱۳۹۲/۰۹/۱۲
سلامی دوباره
یکم بیشتر توضیح میدم
ببینین من تو php یه متغیری ساختم مثلا به اسم x$!
یه متغیر دیگه ای هم ساختم مثلا به اسم min$ که برابر دقیقه ای از تابع date!
میخوام با گذر هر یه دقیقه تو دیتابیس مای اس کیو الم به این متغیر مثلا 10 تا اضافه شه!!! خوب باید الان من چه جوری همچین کدی بنویسم؟؟؟
فکر کنم خوب توضیح داده باشم!
پاسخ: 
سلام
به چند روش می توانید چنین قابلیتی ایجاد کنید:
- روش اول نوشتن کد به PHP و فراخوانی آن در هر دقیقه با قابلیت Cron job در cPanel است.
- روش دیگر استفاده از event trigger در MySQL است، در این روش یک پرس و جو به صورت event اختصاص می دهید که در فواصل زمانی تعیین شده توسط شما اجرا می شود (از برنامه phpMyAdmin استفاده کنید).
- روش دیگر که تنها در هنگام فراخوانی و باز بودن صفحه در مرورگر قابل استفاده است، روش مبتنی بر Ajax است.
نویسنده: mohsen
۱۵:۰۷ ۱۳۹۲/۰۹/۱۳
بازم سلام
من یه سوال دارم اگه نمیتونین دقیق توضیح بدین فقط یه راهنماییم بکنین تا خودم حداقل بدونم دنبال چی هستم
دو سوال دارم
اول اینکه سیستم پیام دادن و .. توی سایت ها چه جوریه؟یعنی مثلا اول پیام مربوط تو دیتابیس ذخیره میشه و با توجه به اون نام کاربری طرف بهش پیام میرسه؟!!!
دوم اینکه مثلا تو بعضی از بازی های اینترنتی میبینیم که از نقشه تو بازی استفاده میکنن این کار چطور امکان پذیره؟ با php میشه این کد ها رو طراحی کرد؟
میدونم سوال هام یکم در واقع چرت هست ولی خوب سواله دیگه هر چی دنبالش میگردم پیدا نمیکنم از همه میپرسم جوابی نمیدن!
بازم تشکر
ولی خواهشا سریع جواب بدین لطفا
پاسخ: 
سلام
مورد اول با اختصاص شماره id اختصاصی به هر کاربر در دیتابیس و با استفاده از بحث session ها انجام می شود، به طور خلاصه هنگام ورود نام کاربری و پسورد کاربر با آی دی او تطبیق داده شده و پیام هایی به او نشان داده می شود که در قسمت id شماره متناظر آن کاربر درج شده باشد.
در مورد بحث بازی های آنلاین، این یک مبحث پیشرفته است که مجموعه ای از زبان های سمت سرور و کاربر (به طور مثال ترکیب PHP، JavaScript، Ajax و...) در تعامل با هم آن را ایجاد می کنند.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





1 × 5
 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 ساعت زمان ببرد.