آموزش MySQL، سیستم مدیریت پایگاه داده

ذخیره اطلاعات به صورت دسته بندی شده و دسترسی سریع به آنها ضرورتی بود که باعث ایجاد سیستم های مدیریت پایگاه داده رابطه ای (Relational Database Management System یا به اختصار RDBMS) در دنیای برنامه نویسی و به تبع برنامه نویسی وب شد، اگر یک برنامه نویس PHP باشیم و بخواهیم به طور مثال سرویس فرهنگ لغات آنلاین طراحی کنیم، قاعدتا اولین مشکلی که با آن روبرو خواهیم شد این است که لغات را در کجا ذخیره و چگونه آنها را فراخوانی کنیم، چگونه کلمه مورد نظر کاربر را از بین کلمات موجود جستجو کرده و نتیجه را پس از پردازش به صفحه مرورگر ارسال نمائیم و سوالاتی از این دست، لذا ناگزیر بحث استفاده از یک سیستم مدیریت پایگاه داده جهت ذخیره، جستجو، انتخاب، ویرایش و حذف اطلاعات مطرح می شود که در وب و بخصوص برای برنامه نویسان PHP اولین و شاید بهترین انتخاب MySQL باشد، اینکه چرا و چگونه از MySQL در کدنویسی PHP خود استفاده کنیم، مبحثی است که در سلسله آموزش های مقدماتی پیش رو به آن خواهیم پرداخت.
MySQL چیست و چه کاربردی دارد؟
قبل از هر چیز بهتر است به این سوال پاسخ دهیم که MySQL چیست و چه کاربردی دارد؟ در پاسخ می توان گفت که MySQL یکی از پرکاربردترین سیستم های متن باز (Open-source) مدیریت پایگاه داده است که توسط شرکت سوئدی MySQL AB ایجاد و اولین نسخه آن در سال 1995 معرفی شد (مالکیت شرکت MySQL AB در حال حاضر در اختیار شرکت Oracle است)، SQL در واقع زبانی است که برای استفاده در سیستم های مدیریت پایگاه داده رابطه ای (RDBMS) طراحی شده و عبارت MySQL اشاره به این زبان دارد، در واقع MySQL برای اجرای دستورات ما مانند دستور ساخت جدول، ذخیره، جستجو، انتخاب، ویرایش و حذف اطلاعات از زبان SQL استفاده می کند و لذا آشنایی قبلی با SQL می تواند فراگیری کار با MySQL را بیش از پیش ساده کند، از آنجایی که این سیستم مدیریت پایگاه داده جزئی از خانواده موسوم به LAMP (مخفف Linux, Apache, MySQL, Perl/PHP/Python) است لذا بیشترین سازگاری و کارایی را در این حیطه دارد و انتخاب اول برنامه نویسان PHP به حساب می آید، با MySQL می توانیم اطلاعات مورد نظر را در دیتابیسی که در سرور ایجاد می کنیم ذخیره کرده آنها را بر طبق اهداف برنامه به صورت حرفه ای دسته بندی و هر زمان نیاز بود در اطلاعات جستجو نموده و مقادیر دلخواه را استخراج نمائیم، این قابلیت ها برای طراحی برنامه های داینامیک وب جزء ملزومات اولیه هستند و MySQL به خوبی این نیازها را پوشش می دهد، استفاده سایت های معروفی مانند Google، Facebook، Twitter، Flicker و YouTube از این پایگاه داده نشان دهنده حرفه ای و کارآمد بودن آن است.
ساختار کلی و نحوه دسته بندی اطلاعات در پایگاه داده
همان طور که اشاره شد پایگاه داده جزء کلیدی در برنامه های کاربردی تحت وب محسوب می شود و لذا شناخت ساختار کلی و نحوه دسته بندی اطلاعات در آن اهمیت ویژه ای دارد، در MySQL هر پایگاه داده (Database) یک نام بخصوص دارد و حداقل از یک جدول (Table) اطلاعاتی تشکیل شده است، جداول نیز خود شامل زیر مجموعه هایی هستند که به آنها ستون (Column) می گویند که سطرح های اطلاعات (Rows) را در خود جای می دهند، به طور مثال دیتابیس زبان های برنامه نویسی می تواند شامل جدول برنامه نویسی دسکتاپ، برنامه نویسی موبایل و برنامه نویسی وب باشد، به همین صورت هر جدول می تواند شامل ستون (Column) و سطرها (Rows) باشد، سطرح ها در واقع همان ردیف های اطلاعات هستند که در جدول برای هر ستون ذخیره می شوند (تصویر زیر):

در نمونه ساختار فوق programming نام دیتابیس، desktop نام جدول و id، name و status ستون های دیتابیس هستند که سطرح های اطلاعاتی را شامل می شوند (نام دیتابیس، جدول و ستون ها در مثال فرضی و به تعداد دلخواه می باشند).
مدیریت پایگاه داده MySQL با phpMyAdmin
برنامه نویسان PHP معمولا از دو طریق می توانند به سیستم مدیریت پایگاه داده MySQL دسترسی داشته باشند، با استفاده از برنامه phpMyAdmin و همچنین با کدنویسی PHP، برنامه phpMyAdmin جهت مدیریت به اصطلاح دستی MySQL و اعمال تغییراتی مانند ساخت پایگاه داده جدید، ساخت جداول، ستون ها، تغییر ویژگی های جداول و ستون ها و مواردی از این دست کاربرد دارد و تقریبا هر کاربری با هر سطح از آشنایی با برنامه نویسی می تواند با محیط آن ارتباط برقرار کرده و نیازهای خود را مرتفع کند، phpMyAdmin در واقع برنامه ای نوشته شده به PHP با هدف مدیریت پایگاه داده با استفاده از رابط کاربری ساده و تحت مرورگر است تا هم انجام موارد اولیه، برپایی پایگاه داده و اعمال تغییرات بعدی در آن آسان و روند کار تسریع شود و هم کاربران مختلف با هر سطح از آشنایی با PHP بتوانند بدون دغدغه و احیانا نگرانی از سردرگمی، با محیط MySQL ارتباط برقرار کنند، به هر صورت برای آشنایی بیشتر می توانیم به سایت مرجع این برنامه مراجعه کنیم:
https://www.phpmyadmin.net
همچنین می توانیم با پیش نمایشی از این برنامه در آدرس زیر کار کنیم که برای شروع امکان بسیار خوبی است:https://demo.phpmyadmin.net/master-config
یادآور می شویم که این برنامه معمولا به صورت از پیش نصب شده در سرورهای لینوکس یا برنامه های سرور مجازی (Localhost) وجود دارد و کافی است از پنل مدیریت هاست سایت یا از طریق آدرس localhost/phpmyadmin
در لوکال به آن دسترسی پیدا کنیم، در برنامه های سرور مجازی معمولا با نام کاربری root و بدون پسورد می توانیم وارد محیط برنامه phpMyAdmin شویم.ارتباط PHP با پایگاه داده MySQL
همان طور که اشاره شد با کدنویسی PHP می توانیم به پایگاه داده MySQL دسترسی داشته و بین کدهای PHP با سیستم مدیریت پایگاه داده MySQL ارتباط برقرار کنیم، این قابلیت باعث می شود بتوانیم برنامه های حرفه ای تحت وب که معمولا نیازمند نگهداری داده ها در یک بانک اطلاعاتی مطمئن هستند را طراحی و عملیاتی از قبیل ذخیره سازی، دسته بندی، جستجو، انتخاب، ویرایش و حذف ردیف ها را به صورت سیستماتیک و با کمک دستورات برنامه نویسی انجام دهیم، به طور مثال کاربر می تواند در فیلد جستجوی برنامه تحت وب عبارت مورد نظر خود را وارد کرده و ما با دستورات PHP به MySQL می گوییم که ردیف های متناسب با کلمه درخواستی کاربر را انتخاب و به عنوان نتیجه به مفسر PHP برگرداند، در ادامه نتیجه دریافتی را با کدنویسی PHP تجزیه تحلیل نموده و خروجی نهایی را مطابق هدف برنامه به کاربر نشان دهیم، این ارتباط با کمک برنامه هایی تحت عنوان اکستنشن (Extension) صورت می گیرد، اکستنش ها در واقع بسته های نرم افزاری هستند که به هسته PHP امکان انجام عملیات های خاص مانند اتصال و مدیریت پایگاه داده را می دهند، در PHP برای این منظور پیشتر از اکستنشن قدیمی MySQL استفاده می شد که در نسخه 7 PHP منسوخ و به صورت پیش فرض حذف شده است و توصیه می شود برای برنامه های جدید اکستنشن MySQLi یا PDO را جایگزین آن نمائیم.
نکته: سیستم مدیریت پایگاه داده MySQL با اکستنشن MySQL دو عبارت مجزا هستند!
PHP <===> MySQL
- MySQL (Deprecated - منسوخ شده)
- MySQLi (Recommended - توصیه شده)
- PDO (Recommended - توصیه شده)
چرا از اکستنشن MySQLi یا PDO استفاده کنیم؟
اکستنشن MySQLi (حرف i پایانی مخفف improved) نسخه بهبود یافته از اکستنشن MySQL بوده و شیوه نگارش دستورات آن در حالت برنامه نویسی رویه ای شباهت زیادی به شیوه نگارش دستورات MySQL دارد، همچنین MySQLi اکستنشن اختصاصی PHP برای کار با سیستم مدیریت پایگاه داده MySQL بوده و بیشترین سازگاری را با امکانات آن دارد، با توجه به این دلایل در آموزش های پیش رو از این اکستنشن در مثال ها استفاده خواهیم کرد، PDO (مخفف PHP Data Objects) اکستنشن دیگری است که می تواند جایگزین MySQL شود، PDO اکستنشن غیراختصاصی PHP برای کار با پایگاه داده و از جمله پایگاه داده MySQL است، این اکستنشن در مقایسه با MySQLi سازگاری کمتری با امکانات سیستم مدیریت پایگاه داده MySQL دارد اما به لحاظ حجم کم (Lightweight)، حرفه ای بودن و امکان کار با سیستم های مختلف پایگاه داده می تواند در برنامه های تحت وب گزینه مناسبی باشد، توسعه دهندگان PHP در نسخه های جدید استفاده از اکستنشن MySQL را توصیه نمی کنند و آن را به حالت Deprecated درآورده اند که یعنی استفاده از آن توصیه نمی شود و حتی از نسخه PHP 7 به بعد دیگر این اکستنشن در مفسر PHP به صورت پیش فرض وجود ندارد، دلیل این موضوع رشد امکانات و قابلیت های PHP در طی سالیان گذشته و قدیمی شدن اکستنشن MySQL در طی این فرآیند است، همچنین قابلیت های زیادی به سیستم مدیریت پایگاه داده MySQL اضافه شده است که با اکستنشن قدیمی MySQL امکان استفاده بهینه از آنها وجود ندارد، به طور مثال در بخش حفظ امنیت برنامه های نوشته شده به زبان PHP استفاده از این اکستنشن باید با دقت و تسلط کافی صورت گیرد تا با حملات موسوم به SQL Injection روبرو نشویم که این با هدف استفاده همگان از PHP در تضاد است و در اکستنشن های جدید (MySQLi و PDO) امنیت کدهای PHP به شکل محسوسی بهبود یافته، همچنین نگهداری فنی و ایجاد تغییرات بعدی در برنامه های نوشته شده با اکستنشن MySQL در مقایسه با اکستنشن های جدید به نسبت زمانبر و حساستر است.
نکته: در طراحی ساختار برنامه ها می توانیم با جدا کردن بخش اجرای پرس و جوهای دیتابیس، امکانی در نظر بگیریم که کاربر به دلخواه خود اکستنشن مورد نظر را انتخاب کند، قاعدتا این کار صرفا جنبه تزئینی ندارد و در مواردی که یک اکستشن به هر دلیل کارایی ندارد می تواند راهگشا باشد.
پشتیبانی MySQLi از برنامه نویسی رویه ای و شی گرا
اکستنشن MySQLi از دو شیوه برنامه نویسی رویه ای (Procedural) و شی گرا (Object-oriented) پشتیبانی می کند، در این سری از آموزش ها نمونه کدها هم به شیوه رویه ای و هم به شیوه شی گرا ارائه می شوند، یادآور می شویم که دو روش در عمل کارکرد مشابه دارند و تفاوت در نحوه کدنویسی و مدیریت ساختار برنامه است، هرچند بحث در مورد تفاوت برنامه نویسی رویه ای و شی گرا باید در جای خود بررسی شود اما در یک تحلیل ساده معمولا از کدنویسی رویه ای برای نوشتن برنامه ها و پروژه های کوچک به عنوان روش به اصطلاح دم دستی استفاده می شود و برنامه نویسی شی گرا برای ایجاد ساختارهای پیچیده تر و نوشتن برنامه هایی با جزئیات بیشتر کاربرد دارد، خوشبختانه PHP در این زمینه سخاوتمند است و حق انتخاب را به کاربران می دهد، توصیه ما این است که ضمن فراگیری روش رویه ای به عنوان شیوه پایه و مقدماتی، پروژه های کاربردی و پر جزئیات خود را به روش شی گرا (OOP یا Object-oriented programming) بنویسیم.

به روز رسانی ردیف ها در MySQL با UPDATE
نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
انتخاب ردیف ها با دستور SELECT در MySQL
اتصال PHP به MySQL با اکستنشن MySQLi
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL


خداخیرتون بده مشکلم برطرف شد
من موقع ایجاد یک table در phpmyadmin بخش Collation رو روی utf8_persian_ci قرار میدم تا بتونم هم حروف فارسی و هم انگلیسی و عدد در اونها ذخیره کنم.
اما با تغییر هاستینگ و تفاوت بین ورژن های php ارائه شده توسط انها به یک مشکل برخوردم
حروف فارسی در دیتابیس به شکل
ØØ³Ù„اÙ
ذخیره میشوند و بعد از فراخوانی به شکل صحیح نمایش داده میشوند (تا اینجا مشکلی وجود نداره).اما بعد از تغییر ورژن php به ورژن بالاتر حروف فارسی به همان شکل ناخوانا از دیتابیس فراخوانی می شوند و بلعکس موقع ذخیره در دیتابیس به شکل خوانا ذخیره می شوند.
حال دو سوال از شما داشتم :
1- موقع ایجاد table بخش Collation رو دقیقا چی قرار بدم تا در آینده چنین مشکلی پیش نیاید (با این حساب که هم حروف فارسی و انگلیسی و اعداد قراره در آنها ذخیره بشه).
2- اطلاعات فعلی دیتابیس رو به چه روشی convert کنم تا به شکل خوانا تبدیل بشن ؟ (از ++notpad استفاده کردم اما نتیجه ای نگرفتم).
با تشکر بابت سایت مفیدتون
SET NAMES 'utf8'
برای بازگرداندن اطلاعات فعلی نیز راهی جزء این نیست که با یک کد PHP اطلاعات را ردیف به ردیف فراخوانی کرده و سپس مجدد در دیتابیس ذخیره کنید (برای جلویگری از بروز مشکلات ناخواسته، بهتر است یک جدول جدید بسازید و صرفا پس از انتقال صحیح تمام اطلاعات، از جدول جدید استفاده کنید) همچنین باید دقت کنید که فایل های شما BOM نداشته باشد، بدین منظور فایل های خود را با ویرایشگر ++Notepad باز کرده و سپس از قسمت Encoding گزینه Encoding UTF-8 (بدون BOM) را انتخاب و فایل خود را مجددا ذخیره نمائید.خب خدا بیامرزتش الان باید آپدیت کنید آموزش pdo و mysqli بزارید
آیا زیاد شدن تعداد rows ها در هر table به مرور زمان اختلال از قبیل کند شدن و ... ایجاد نمیکند ؟
مثلا 10 table داشته باشیم و به مرور زمان rows های هر table به 50.000 یا 500.000 یا 5.000.000 برسد مشکلی ایجاد نمی شود ؟
باتشکر
بنده دانشجوی ترم آخر مهندسی نرم افزارم (کارشناسی)
خیلی علاقه مندم مطالب طراحی وب و مسائل پیرامون اون رو فرا بگیرم
میشه لطف کنین در مورد اینکه چه کتابایی باید بخونم برای یاد گیری از سطح مقدماتی تا پیشرفته رو به من بگین
ممنون میشم به ایمیل بنده جواب رو ارسال کنین
با تشکر
من يه سوال داشتم ممنون ميشم اگه جوابمو بدين.
من يه پايگاه داده دارم با سه جدول جدول question و comment , relation _q_c
داخل جدول question ايدي سوال (Q_Id) ثبت ميشه و متن سوال
داخل جدول comment ايدي نظر (C_Id) ثبت ميشه به همراه متن نظر
و داخل جدول relation _q_c هم ايدي سوالو داريم و هم ايدي جوابو . خود اين جدول هم يه ايدي داره به نام QC_Id.
در واقع من دارم يه سايت مشابه stackoverflow.com رو ايجاد مي كنم.
مي خوام وقتي كاربر وارد يه سوال شد كه توسط يكي ديگر از اعضاي سايت پرسيده شده بتونه نظرات مربوط به همون سوال رو ببينه نه نظرات همه ي سوالا رو!
خوب اينو چطوري بايد بنويسم؟
ممنون ميشم اگه جواب بدين خيلي خيلي چون ماه بعد تحويل پروژه دارم
- هم می توانید به صورت معمولی و در چند پرس و جو، ابتدا ID نظرات را بر طبق ID مطلب استخراج کنید (این کار با اطلاعات جدول سوم ممکن است) و در حلقه while مجددا ID ها را در پرس و جوی دیگری استفاده کرده و محتوای آنها را از دیتابیس خروجی بگیرید.
- روش دیگر استفاده از پرس و جوی ترکیبی و به طور مثال بر مبنای JOIN است.
در صورت نیاز به کمک بیشتر نمونه فایل sql جداولتان را به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید.
وبسایت محشری دارین.
that's cool
یه سوال آیا میشه دستورات php در فایل دیتابیس قرار بگیره؟
سوال بعدی اینکه فرمت دیتابیسی که phpmyadmin میده چیه؟
آخرین سوال، اینجور که تو اینترنت نوشته فایلی با پسوند sql میتونه اسکریپت باشه. آیا میتونه دیتابیس هم باشه؟
- در برنامه PHPMyAdmin می توانید از دیتابیس خود در قسمت Export انواع خروجی های مختلف داشته باشید (فرمت استاندارد خود MySQL فرمت sql است).
- چنین فایلی معمولا حاوی دستورات دیتابیس و تنظیمات آن است، چون SQL بدین منظور تعریف شده (Structured Query Language).
البته هنوز نمی تونم ازش استفاده کنم بنظر شما بهتره از mysql استفاده کنم یا pdo از نظر امنیت و سرعت
نتیجه:
بهتر است ابتدا از صرف دستورات SQL شروع کنید و پرس و جوها را یاد بگیرید (دستورات دیتابیس بین روش های فوق فرقی ندارند)، سپس در هنگام نوشتن برنامه های کاربردی با PHP یکی از اکستنشن های mysqli یا PDO را انتخاب نمائید.
موفق باشین موگویی
مثال:
SELECT * FROM `tbl` WHERE 1;
با تشکر
utf8_persian_ci
انتخاب کنید، سپس برای اینکه کاراکترها به صورت فارسی در دیتابیس ذخیره شوند مراحل زیر را انجام دهید:- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکدutf8_persian_ci
بسازید.- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
SET NAMES 'utf8'
- اگر مشکل همچنان حل نشد، فایل های خود را با ویرایشگر ++Notepad باز کرده و سپس از قسمت Encoding گزینه Encoding UTF-8 without BOM را انتخاب و فایل خود را مجددا ذخیره نمائید.
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.