پنجشنبه ۰۱ آذر ۱۴۰۳

Thursday, November 21, 2024 GMT +3: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 مطالب بیشتر:
توابع تجمیعی (Aggregate Functions) در MySQL
نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
اتصال PHP به MySQL با اکستنشن MySQLi
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
دیدگاه
more ۴۳ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
۱۵:۵۰ ۱۳۹۱/۰۸/۱۵
با سلام و خسته نباشید مثل همیشه مطالبتون عالی هست فقط یک سوال پیش اومده برام مثلا من می خواهم یک مقدار رو به اون ستون اضافه کنم یعنی table امتیاز 5 هست و بعد با آپدیت 1 امتیاز دیگر آن اضافه بشه مثلا بشه امتیاز + یک چگونه امکان پذیر است؟ پیشاپیش تشکر
سلام
اگر درست متوجه سوال شما شده باشیم، ابتدا باید مقدار فعلی ستون مورد نظر را با SELECT و تابع mysql_fetch_array فراخوانی کنید (به آموزش های گذشته مراجعه نمائید)، سپس مقدار ستون را با مقادیر یک جمع کرده و حاصل را با update در ستون به روزرسانی کنید.
امیر
۱۰:۳۸ ۱۳۹۲/۰۳/۰۲
سلام
من مشکلی با آپدیت کردن ندارم اما برای مشاهده ی اطلاعات آپدیت شده من باید هر باز صفحه رو رفرش کنم
. که این خیلی برام آزار دهنده است با php هم کار می کنم . آیا راهی هست که بشه این مشکل رو حل کرد مثلا یه تایمر جاوا اسکریپتی باشه که فقط کد های php رو بروز کنه؟
سلام
باید از آژاکس (Ajax) و ترکیب آن با PHP استفاده کنید که خود آموزش های جداگانه دارد.
امیر
۱۱:۰۰ ۱۳۹۲/۰۳/۰۲
ممنون از سایت خوبتون آموزش آژاکس تون همه چیز رو برام روشن کرد ممنون از سایت کاربردی و جالبتون
پارسا
۲۳:۲۰ ۱۳۹۲/۰۵/۰۲
سلام
میخوام فیلدهای موجود در دیتابیسم و نمایش بدم به صورت text که بتونم ویرایش کنم و اطلاعات ویرایش شده رو دوباره در دیتابیس ذخیره کنم؟؟؟
ممنون میشم کمکم کنید؟؟
سلام
اطلاعات را از دیتابیس SELECT و نتیجه را به متغیرها مقداردهی کنید، سپس در هنگام ایجاد خروجی، در قسمت value فیلدها جایگزین نمائید، در نهایت و پس از ویرایش موارد مد نظر، از UPDATE (در دستور MySQL) استفاده کرده و مقادیر ستون ها را به روز کنید.
۱۶:۵۸ ۱۳۹۲/۰۷/۲۲
با سلام خدمت شما استاد گرامی .
میتونید یه مثال از همین دستور UPDATE بزنید .
ببینید من میخوام اطلاعات رو به صورت تکست مشاهده کنم و بتونم اونها رو ویرایش کنم .
مثلا من اطلاعاتی مانند : نام , نام خانوادگی , و ... یک فرد رو بتونم بخونم و هم ویرایش کنم .
اگر میشه یه مثال خوب بزنید .
سلام
همان طور که در پاسخ یادداشت بالا اشاره شده، باید ابتدا موارد را SELECT کنید، آنها را به متغیرهایی در PHP نسبت دهید و در هنگام چاپ فرم HTML، در قسمت value فیلدها، مقادیر متغیرها را خروجی دهید، سپس بعد از ویرایش، می توانید مجددا فرم را به یک فایل دیگر (یا همان فایل) ارسال کرده و فرآیند UPDATE را انجام دهید (باید با نحوه کار SELECT و همچنین فرم های وب آشنا باشید).
۱۲:۴۶ ۱۳۹۲/۰۷/۲۴
سلامی دوباره خدمت شما استاد گرامی
بنده کارهایی که شما گفتید رو انجام دادم .
کد :
<?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 می شود!
۱۵:۰۴ ۱۳۹۲/۰۷/۲۴
خیلی ممنون از پاسخگویی خوب و سریعتون .
۱۵:۲۸ ۱۳۹۲/۰۷/۲۴
سلامی دوباره .
ببخشید که من زیاد سوال میپرسم :|
مشکل قبلی به لطف شما حل شد .
الان یه مشکل دیگه پیش اومده .
وقتی که پسورد عوض میشه اول پسورد قبلی رو روی input نشون میده یا وقتی دوباره عوض میکنی یا صفحه رو رفرش میکنی بعد پسورد جدید رو نشون میده .
دلیلش چی میتونه باشه ؟
سلام
باید معنی و نحوه کار دستوراتی که می نویسید را بدانید، چون مفسر PHP هیچ کاری را بی دلیل انجام نمی دهد! به نظر نیاز به مطالعه بیشتر مباحث مقدماتی دارید،
در مورد مشکل اخیر، چون دستور UPDATE بعد از SELECT اجرا می شود، لذا با ارسال فرم، ابتدا پسورد قبلی انتخاب شده (در متغیر ذخیره) و در ادامه مقادیر پسورد جدید در دیتابیس جایگزین می شود، به همین خاطر در فرم همان مقدار قبلی نمایش داده شده و با رفرش، مجددا پسورد آپدیت شده انتخاب می شود و...
۱۵:۴۱ ۱۳۹۲/۰۷/۲۴
آقا مشکل حل شد .
مجید
۰۲:۰۳ ۱۳۹۲/۰۸/۱۹
سلام چطور میشه از دیتابیس ساخته شد نسخه ی پشتیبان تهیه کرد طوری که اطلاعاتی از دست نره
سلام
این کار هم از طریق برنامه 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 لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
7 × 4
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سیدعباسی
با تشکر از شما استاد من مشکل خودم رو بصورت زیر حل کردم تغییر بدید چون وقتی کدهارو می نویسیم مشخص نیست...
۱۴۰۳/۰۸/۱۹

سیدعباسی
با سلام و تشکر از شما دست شما درد نکنه مشکل این کد چیه؟ کار نمی کنه
۱۴۰۳/۰۸/۱۶

سیدعباسی
با سلام و خسته نباشید واسه حذف کپی رایت نمی خوام واسه لینک های خودم میخوام که تابعش رو داشته باشم بصورت عادی لینکها...
۱۴۰۳/۰۸/۱۴

سیدعباسی
با تشکر از شما درست شد ببخشید یه سوال دیگه هم دارم چطور می تونم لینک یک مطلب رو پیدا کنم بعد بگم اگه...
۱۴۰۳/۰۸/۱۳

سیدعباسی
ببخشید کد قبلی اشتباه بود دقت نکرده بودم شرمنده کد اصلاح شده اینه می خوام در انتها همه ی برچسب هارو داشته باشم با...
۱۴۰۳/۰۸/۱۰

سیدعباسی
با سلام خسته نباشی من از این تابع برای استخراج برچسب های سایتم استفاده می کنم تنها مشکلی که این تابع داره اینکه...
۱۴۰۳/۰۸/۰۹

سیدعباسی
با تشکر از شما مشکلم حل شد خیلی ممنون از شما یه سوال دیگه هم دارم البته ببخشید من یه textarea دارم...
۱۴۰۳/۰۸/۰۶

سیدعباسی
با سلام ببخشید هی مزاحمتون میشم من یه پلاگین دارم برای خروجی گرفتن از sitemap لینکهایی که برام خروجی می گیره از بالا به...
۱۴۰۳/۰۸/۰۵

سیدعباسی
با تشکر از شما دوست عزیز خیلی خوب بود یه سوال دیگه هم دارم البته ببخشید وقتی از سایت مپ خروجی میگیریم؟ که لینکها رو...
۱۴۰۳/۰۸/۰۴

سیدعباسی
با تشکر از شما استاد خیلی خوب بود من میخوام فقط آخرین لینک رو بصورت خروجی داشته باشم که شامل post باشه یعنی فقط این...
۱۴۰۳/۰۷/۲۸

سیدعباسی
برای کدی که فرستادم من از این الگو استفاده می کنم میخواهم از لینکهایی شروع کنه که شامل عدد باشن و آدرس سایت به...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام و خسته نباشید من میخوام از سایت مپ زیر لینک اول که شامل post است رو استخراج کنم یعنی خروجی من این نباشه...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام من میخوام از متن زیر لینکش رو دربیارم و در آخر مقدار 3088 رو بصورت خروجی نهایی داشته باشم با...
۱۴۰۳/۰۷/۰۷
  در انتظار بررسی: ۲
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.