parsgreen.com
article

به روز رسانی ردیف ها در 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 با توجه به هدف و برنامه خود استفاده کنید.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» حذف مقادیر از MySQL با دستور DELETE
» نگاهی به MySQL، پرکاربردترین سیستم مدیریت پایگاه داده
» ساخت دیتابیس، جدول و ردیف با دستور CREATE در MySQL
» استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
» استفاده از ORDER و GROUP در MySQL
commentنظرات (۳۱ یادداشت برای این مطلب ارسال شده است)
نویسنده: 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 و...) در تعامل با هم آن را ایجاد می کنند.
paged صفحه 1 از 3




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

5 × 3
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...