آگهی
article

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

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) باشد، سطرح ها در واقع همان ردیف های اطلاعات هستند که در جدول برای هر ستون ذخیره می شوند (تصویر زیر):
MySQL Database Structure
در نمونه ساختار فوق 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) بنویسیم.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» استفاده از WHERE در پرس و جوی MySQL
» اتصال PHP به MySQL با اکستنشن MySQLi
» محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
» به روز رسانی ردیف ها در MySQL با UPDATE
» ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
commentنظرات (۶۸ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: یه سوال
زمان: ۰۳:۵۱:۰۹ - تاریخ: ۱۳۹۸/۰۹/۲۵
سلام. خسته نباشید. ببخشید مساله من دقیقا پیام این صفحه است
https://stackoverflow.com/questions/49934568/phpmyadmin-shows-error-in-processing-request-popup/51447713
و راهکارهاش به کارم نیومد و یه مشکل دیگه هم دارم که از جدول که میرم یوزر پسورد مدیران رو برای ورود بگیرم به دیتابیس وصل میشه ولی فقط رکورد اول رو میشناسه و بقیه رو نمیشناسه. ممنون میشم راهنمایی کنید.
پاسخ: 
ظاهرا این خطا با کدهای وضعیت متفاوتی نمایش داده می شود که ذکر نکرده اید، لطفا راهکارهای این صفحه (تغییر محدودیت استفاده از حافظه رم در فایل php.ini) را نیز اعمال کنید:
https://stackoverflow.com/questions/32028532/phpmyadmin-error-processing-request-200
در صورت عدم رفع مشکل و در مورد مشکل دومی که مطرح کردید تنها با بررسی آنلاین (برنامه TeamViewer) امکان شناسایی و رفع ایراد وجود دارد که در صورت تمایل می توانید از طریق ایمیل (موجود در بخش تماس با ما) مسئله را پیگیری کنید.
نویسنده: مهدی
زمان: ۱۴:۰۲:۱۲ - تاریخ: ۱۳۹۸/۰۹/۲۶
سلام و درود خدمت استاد عزیز
اولا بسیار بسیار سپاسگزارم بابت آموزش هایی که گذاشتین. به معنای کلمه فوق العاده هستش. خیلی عالی توضیح میدین.
مهندس جان یه راهنمایی نیاز دارم
یه صفحه گزارش گیری ساختم به صورتی که مدیر از طریق پنل فیلتری (اکثرا به صورت checkbox) که در اختیارش هست میتونه فیلدهای مختلف رو انتخاب بکنه و در نهایت با دو تا دکمه Limit و Exclude عملیات فیلترینگ رو انجام میده. بعد از اینکه جستجو (فیلتر) انجام شد بالاخره یکسری رکورد برگردونده میشه و اونها رو تو همون صفحه گزارش گیری نمایش میدم.
حالا میخوام دوباره تو این رکوردهایی که برگردونده شده دوباره عملیات فیلترینگ رو انجام بدم. برای اینکار اومدم رکوردهای بازیابی شده رو تو یه جدول موقت ذخیره کردم و دوباره عملیات فیلتر رو تو اون جدول موقت انجام دادم
شما راهکار بهتری مد نظرتون هست؟
البته الان یه راهکار به ذهنم رسید به اینصورت که بجای ذخیره رکوردها در جدول موقت، شرط های کوئری رو ذخیره کنم! بعد هر تعداد بار که عملیات فیلترینک انجام میگیره با این شرط های ذخیره شده and کنم.
نظر شما چیه؟
پاسخ: 
راه کار ذخیره در جدول جداگانه را تا حد امکان انتخاب نکنید بهتر است، اصولا نباید پرس و جوی SELECT مبتنی بر INSERT دیگری باشد! اما برای هدفتان استفاده از AND راهکار خوبی است و در نهایت یک پرس و جو اجرا می کنید، همچنین می توانید در سمت کاربر نیز فیلترینگ داشته باشید، یعنی هر دسته از نتایج با آی دی خاصی در صفحه خروجی داده شوند و سپس با کدهای جاوا اسکریپت و بر اساس فیلدهای مد نظر کاربر وضعیت نمایش بلاک div یا سلول td نتایج را بر اساس نیاز تغییر دهید، در این روش نیازی به ارسال درخواست مجدد به سرور نیست، استفاده از Ajax و JSON نیز روش ترکیبی است که می تواند راه حل دیگری باشد، در کل انتخاب هر کدام از روش ها بستگی به نوع و نیاز برنامه دارد.
نویسنده: مهدی
زمان: ۲۳:۲۷:۱۷ - تاریخ: ۱۳۹۸/۰۹/۲۶
سپاس از راهنمایی شما مهندس جان
بله در مورد INSERT حق با شماست و حدس میزدم روشم اشکال داره که مزاحمت شدم.
مهندس در مورد Ajax تو ذهنم هست منتها چون تعداد رکوردها زیاده گفتم ممکنه کاربر معطل بشه چون با انتخاب هر فیلد باید عملیات فیلترینگ انجام بگیره، ولی حتما تستش میکنم.
بازم بابت راهنماییتون بسیار سپاسگزارم
انشاءالله همیشه تندرست و دلشاد باشید
نویسنده: مهدی
زمان: ۰۹:۴۱:۲۲ - تاریخ: ۱۳۹۸/۱۰/۰۱
سلام و درود
مهندس جان با روش ذخیره کوئری (در یه سشن) به نتیجه خوبی رسیدم و چندین بار میتونم عملیات فیلترینگ رو پشت سر هم انجام بدم.
مهندس من تو یه گزارش دیگه از DISTINCT استفاده کردم ولی تو خروجی چند تا رکورد تکراری میده!
با GROUP BY هم امتحان کردم ولی خروجیش باز تکراری داشت!!
SELECT DISTINCT article_title FROM article_journals ORDER BY article_title
فقط یک ستون از جدول رو هم انتخاب کردم.
مهندس این DISTINCT به چی حساس هستش؟ اخه جالب اینجاست که تمام حروف اون ستون هم شبیه به هم هست!
نظر محترمتون چیه در این مورد؟
پاسخ: 
DISTINCT به هر تفاوتی حساس است! به فرض اگر آخر مقدار یک ستون با فاصله (Space) ذخیره شده باشد با همان کلمه بدون فاصله متفاوت است (برای جلوگیری از بروز اختلاف قبل از ذخیره سازی مقادیر را از تابع trim در PHP عبور دهید) یا به فرض حرف ي عربی با ی فارسی متفاوت است!
نویسنده: مهدی
زمان: ۱۹:۰۸:۰۶ - تاریخ: ۱۳۹۸/۱۰/۰۱
از پاسخ گویی شما بسیار سپاسگزارم
مهندس جان دقیقا همین کار رو کردم
قبل از ذخیره فیلد در دیتابیس از trim و strip_tags و یکسری اعتبار سنجی های دیگه استفاده کردم. فیلدی که من دارم باهاش کار میکنم 99 درصد موارد مقادیر انگلیسی هستش و معمولا مشکل ی و ه و ک رو ندارم.
مهندس اومدم strlen گرفتم دیدم تو تعداد کاراکتر واقعا تفاوت وجود داره. رفتم دیتابیس رو نگا کردم متوجه شدم "بعضی" از خط فاصله ها به صورت حروف در هم ریخته ذخیره کرده. مورد زیر رو ببینید
Optimization of coagulation–flocculation
جالب اینجاست تو خروجی درست نمایش میده (البته خروجی که من میگیرم مهم نیست و distinct با حروف کار داره) یعنی به صورت زیر
Optimization of coagulation–flocculation
مهندس این مشکل مربوط به چیه و راه حل پیشنهادیتون چیه؟ نوع collation فیلد در دیتابیس تاثیر داره؟
پاسخ: 
احتمالا انکودینگ ذخیره سازی مقادیر در دیتابیس با Windows1252 انجام شده که باید UTF-8 باشد، برای تبدیل ابتدا یک پشتیبان از دیتابیس فعلی تهیه کنید، سپس باید یک برنامه برای SELECT و آپدیت مجدد بنویسد، اطلاعات را SELECT کنید و از فیلتر توابعی مانند iconv عبور و UPDATE کنید:
https://www.php.net/manual/en/function.iconv.php
Server Connection Collation دیتابیس را
utf8_persian_ci
انتخاب کنید، علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکد
utf8_persian_ci
بسازید.
پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
SET NAMES 'utf8'
نویسنده: مهدی
زمان: ۲۱:۴۰:۵۷ - تاریخ: ۱۳۹۸/۱۰/۰۱
مهندس تلاش زیادی کردم که رکوردها رو با distinct بدون تکرار در بیارم، مثلا دستورات زیر رو اجرا کردم
UPDATE  article_journals SET article_title = REPLACE(article_title, 'ff', 'ff') WHERE article_title LIKE '%ff%';
UPDATE articles SET article_title = REGEXP_REPLACE(article_title, ' \+', ' ')
ولی باز یکسری مشکلات دیگه وجود داره که DISTINCT تعداد خالص رو بهم نمیده، مثلا ممکنه داخل متن عنوان مقاله یه نقطه اضافه یا کاراکتر های مثل – وجود داشته باشه یا اینکه ممکنه بعضی از حروف عنوان مقاله capital نوشته شده باشه (من موقع ذخیره to lower نکردم و ...) با این حال من قصد دارم از تابع similar_text استفاده کنم تا درصد تشابه یک مقاله رو با بقیه مقالات بدست بیارم و اونایی که مثلا بیش از 90 درصد تشابه دارند رو تکراری تشخیص بدم.
تو این روش چون هر مقاله با کل مقالات مقایسه میشه احساس میکنم روش کندی هستش.
مهندس جان شما راهکار سریع تری سراغ داری؟
پاسخ: 
ارائه راه حل کاربردی نیاز به بررسی بیشتر دارد اما اگر نتوانید از امکانات خود MySQL استفاده کنید و توابعی مانند similar_text با توجه به حجم محتوا کارایی لازم را نداشته باشند باید الگوریتم اختصاصی طراحی کنید، به فرض حداقل در تئوری چند بخش از هر مقاله را به صورت تصادفی انتخاب و با دیتابیس مقایسه کنید و البته برای حل مشکل سرعت، سیستم ایندکس گذاری داشته باشید (کلمات کلیدی هر مقاله به همراه تکرار را داشته باشید و فقط در مقالاتی جستجو کنید که کلمه کلیدی آن با کلمه کلیدی مقاله مورد نظر همسان باشد)، در کل با این اوصاف کار سخت و زمانبر خواهد شد.
نویسنده: مهدی
زمان: ۱۹:۱۵:۵۱ - تاریخ: ۱۳۹۸/۱۰/۰۲
سلام و درود
مهندس جان در حال حاضر collation مربوط به دیتابیس و جدول و ستون های مربوطه همش utf8_persian_ci هستش.
وقتی
SHOW VARIABLES LIKE 'collation%';
رو اجرا میکنم خروجی زیر رو دارم
collation_connection=utf8_general_ci
collation_database = utf8_persian_ci
collation_server = latin1_swedish_ci
طبق راهنمایی شما برای اینکه collation_server رو عوض کنم collation_server = utf8_persian_ci و character_set_server=utf8 رو به my.cnf اضافه کردم. منتها مشکلی که پیش اومد این بود که تمام مقادیر فارسی داخل دیتابیس وقتی نمایش داده میشند حروف درهم ریخته نشون میده.
یا وقتی داخل فایل connection به دیتابیس دستورات زیر را میزنم باز مقادیر فارسی دیتابیس رو درهم ریخته نشون میده
$connect=new PDO($dsn,$user,$pass);	
$connect->exec("SET NAMES utf8");
پاسخ: 
نیازی به اعمال تغییر در فایل my.cnf نیست! سعی کنید در برنامه phpMyAdmin یک دیتابیس جدید به صورت utf8_persian_ci ایجاد کنید، جداول و ستون ها هم به همین صورت تعریف شوند، سپس اطلاعات فعلی را با PHP استخراج کنید و در جدول جدید INSERT نمائید، اگر همه چیز درست باشد اطلاعات باید به صورت خوانا و فارسی در برنامه phpMyAdmin دیده شوند، در غیر اینصورت قسمتی را اشتباه انجام می دهید، برای تست به جای اطلاعات موجود یک متن ساده را از فرم HTML دریافت و INSERT کنید، در صورتی که اطلاعات به صورت مستقیم به درستی درج شوند باید اطلاعات ناخوانا را ابتدا از فیلتر توابع مربوط به یونیکد مانند iconv عبور دهید (نیاز به تست و آزمایش و خطا است).
کلا مشکل مطرح شده با ناسازگاری یونیکد ذخیره سازی و بازیابی است که اگر مراحل گفته شده را انجام دهید قابل رفع است، در صورت تداوم مشکل ممکن است نیاز به بررسی از طریق برنامه TeamViewer باشد!
نویسنده: محمدباقر حسیبیان
زمان: ۱۶:۴۲:۳۸ - تاریخ: ۱۳۹۹/۰۴/۰۶
من این مشکل برام پیش اومده که موقع ورود به پروژه م توی لوکال هاست wamp صفحه سفیده و هیچی رو نشون نمیده و کد سایت هم هیچ مشکلی نداره
پاسخ: 
قاعدتا هیچ مشکلی بی دلیل نیست اما باید با خطایابی مرحله به مرحله ایراد را پیدا کرد، رفع مشکل نیاز به دسترسی و تست پروژه در سیستمتان دارد که در صورت تمایل می توانید برنامه Team Viewer را نصب و از طریق ایمیل سایت (موجود در بخش تماس) اطلاع دهید تا با تعیین زمان قبلی پروژه بررسی شود.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ کوتاه و مختصر داده خواهد شد!
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.





4 × 9
 refresh
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form نیلوفر
در:
سلام. من تازه کار هستم و توی سایتی که طراحی کردم یه سرچ باکس گذاشتم. ارتباط با پایگاه داده هم داره و نتایج رو نشون...
۱۲:۵۳:۴۳ ۱۳۹۹/۰۴/۲۳

form مهدی
در:
سلام من از کد زیر استفاده کردم ولی وقتی که اعمال میشه کل css های سایتم میپره.. چه باید بکنم
۰۹:۵۵:۵۰ ۱۳۹۹/۰۴/۲۳

form سلماسی
در:
سلام ایا اگر از وبسایت شخصی کسی بازدید کنیم صاحب وبسایت شماره ی ما را می بیند
۲۱:۳۱:۵۳ ۱۳۹۹/۰۴/۲۲

form mahdi
در:
سلام استاد اگه براتون زحمتی نیست یه نگاه دیگه بهش بندازید ، الان ریموو ادیت درست هستن فقط برای نمایش کلیشون که وقتی رفرش میکنیم...
۱۹:۱۳:۱۵ ۱۳۹۹/۰۴/۲۲

form mahdi
در:
سلام استاد عزیز ، میتونید یه نمونه که فقط با جاوا اسکریپت کار شده نه با فریمورکاش بهم معرفی کنید ببینم؟ من هرچی گشتم پیدا...
۱۴:۴۶:۲۴ ۱۳۹۹/۰۴/۲۲

form mahdi
در:
سلام استاد عزیز و گرامی ، یه دفتر چه یادداشت با localstorage میخوام بنویسم ولی مشکل دارم، دو تا سوال دارم ممنون میشم راهنماییم...
۱۲:۰۵:۰۷ ۱۳۹۹/۰۴/۲۲

form اریا
در:
سلام و درود بزرگوار چه دستوری باید بنویسیم تا فقط مقدارهای خاصی از ارایه بتونیم نمایش بدیم. مثلا یک ارایه 6 خونه ای...
۱۶:۴۷:۳۱ ۱۳۹۹/۰۴/۲۰

form کافه کتاب
در:
سپاس خیلی وقت بود دنبالش بودم مرسی از سایت عالیتون
۱۴:۵۱:۴۳ ۱۳۹۹/۰۴/۲۰

form سجاد
در:
دمتون گرم. خیلی زحمت کشیدید
۱۳:۴۳:۱۱ ۱۳۹۹/۰۴/۲۰

form KhashayarPrk
در:
سلام. میخوام الگو تمام کلمات داخل پرانتز رو بدون پرانتز بریزه ارایه با این کد فقط یک پرانتز رو جواب میده.
۱۳:۱۳:۴۷ ۱۳۹۹/۰۴/۲۰

form Oliver
در:
چطوری دستور background رو برای جدلمون عکسش رو تنظیم کنیم و بهش طول و عرض بدیم
۱۶:۰۷:۱۷ ۱۳۹۹/۰۴/۱۸

form محمد
در:
با عرض سلام ببخشید چطوری میتونم واسه اشتراک کاربر انقضا بزارم مثلا یک ماه داخل دیتابیس ردیف تایم رو درست کردم البته تاریخ رو تبدیل...
۱۹:۱۴:۵۹ ۱۳۹۹/۰۴/۱۵

form آیدا
در:
سلام من در حال طراحی با html هستم اما طبق فیلم آموزشی پیش میرم از یه جایی به بعد هم تغییرات اعمال نمیشه...
۲۲:۴۷:۴۴ ۱۳۹۹/۰۴/۱۴

form علی
در:
سلام اگه میشه یه تکه کدی بفرستید که کاربر نتونه عکس مورد نظر رو دانلود کنه و با نگه داشتن روی عکس فقط لینکو ببینه...
۰۹:۳۰:۴۹ ۱۳۹۹/۰۴/۱۴

form sina2000
در:
با سلام و خسته نباشید طبق کد زیر استفاده میگه متغیر Pdc برای PDO است لطفا نمونه کد برای لایبرری...
۱۵:۰۳:۵۱ ۱۳۹۹/۰۴/۱۳
form محمد امین
در:
سلام ممنون از مطلبتون ببخشید من یه سایتی با شی گرایی کامل زدم الان میخوام آدرسشو بهینه کنم آدرس الان من به این صورته:...
۱۸:۲۸:۲۴ ۱۳۹۹/۰۴/۱۱
form ترنم
در:
سلام وقتتون بخیر ببخشید من کدهای مربوط منو و زیر منو رو نوشتم ولی موقع اجرا منوی اصلی رو میاره ولی زیر منوها رو...
۱۱:۰۶:۲۹ ۱۳۹۹/۰۴/۱۱
form ا
در:
سلام چرا وقتی مطالب مربوط که تو وبلاگم هست رو جستجو میکنم نمیاره ؟؟؟
۲۰:۳۱:۰۸ ۱۳۹۹/۰۴/۰۷
form amir
در:
سلام من اگه بخوام با وارد کردن یه id داخل یک text کل اون ردیف پاک بشن باید چه کنم مثلا یک text دریافت میکنم...
۰۱:۴۸:۰۵ ۱۳۹۹/۰۴/۰۷
form محمدباقر حسیبیان
در:
من این مشکل برام پیش اومده که موقع ورود به پروژه م توی لوکال هاست wamp صفحه سفیده و هیچی رو نشون نمیده و کد...
۱۶:۴۲:۳۸ ۱۳۹۹/۰۴/۰۶
form ...
در:
سلام دو سایت نوشته ای مربوط به من رو چند سال قبل لینک دانلود قرار دادن من ازشون خواستم بردارنش ولی اینکارو نکردن سایت...
۱۷:۲۶:۴۲ ۱۳۹۹/۰۴/۰۵
form مجتبی
در:
سلام میشه یک کد جاوا رو به php تبدیل کرد تا لود سایت سریع تر بشه؟
۱۳:۰۴:۲۳ ۱۳۹۹/۰۴/۰۴
form متین
در:
سلام ؛ من تازه شروع به یادگیری کردم ؛ مطلب بسیار کاربردی بود ؛ ممنون از شما دوست عزیز.
۰۱:۵۰:۰۵ ۱۳۹۹/۰۴/۰۴
form mahdi
در:
سلام استاد عزیز و گرامی امیدوارم که حالتون خوب باشه ، اگه براتون ممکنه لطفا یه آموزش خوب در زمینه وردپرس بهم معرفی کنید ،...
۲۱:۴۸:۱۳ ۱۳۹۹/۰۴/۰۳
form امید
در:
در برنامه نویسی کاربر با چه دستوری میتواند به صفحه اصلی برگردد
۱۹:۰۶:۵۶ ۱۳۹۹/۰۴/۰۳
form ali
در:
با سلام من یک پروژه طراحی کردم میخوام که وقتی کاربر روی ادامه مطلب کلیک کرد در خود صفحه بقیه مطالب را ببینه...
۱۸:۴۷:۲۲ ۱۳۹۹/۰۴/۰۳
form علی
در:
سلام و تشکر از زحمات ارزشمند شما احتراما بنده امروز از یک شماره تلفن ثابت از طریق یک رایانه و یک موبایل به طور...
۱۸:۰۱:۱۰ ۱۳۹۹/۰۴/۰۳
form oscar
در:
درود. اگر بخوایم در نمایش تاریخ و زمان که به صورت لحظه ای خودش در صفحه رفرش میشه، فقط عبارت " Mon Jun 22 2020...
۱۵:۵۹:۳۲ ۱۳۹۹/۰۴/۰۲
form علی
در:
با سلام چطور میشه فقط یک صفحه مورد نظرمون رفرش بشه نه همه صفحات سایت
۰۰:۰۳:۴۱ ۱۳۹۹/۰۳/۳۱
form Farzad
در:
الان وقتی فایل رو میخواد دانلود بکنه از خودش فایل میسازه ، به این صورت یعنی بعد از پوشه file هر پوشه ای باشه...
۱۸:۵۶:۲۱ ۱۳۹۹/۰۳/۳۰
form Farzad
در:
سلام ، خسته نباشید من فایل هایی که در هاست میزارم به این شکل هست: یعنی مشخص نیست فایل ها تو چه پوشه...
۱۳:۳۳:۴۰ ۱۳۹۹/۰۳/۳۰
form شیما طیبی
در:
سلام خیلی مطلب مفیدی بود . همیشه به وبلاگ نویسی به چشم یه کار خسته کننده نگاه میکردم ولی خب یه مقدار نظرم تغییر کرد....
۲۳:۵۲:۳۲ ۱۳۹۹/۰۳/۲۹
form احسان
در:
سلام من یک کد اسکریپت دارم که به صورت عددی تبدیل شده است. میخواستم بپرسم چطوری میتونم اسکریپت به حالت اولیه نوشته شده برگردانم و...
۲۱:۰۲:۱۳ ۱۳۹۹/۰۳/۲۷
form علی
در:
ممنون از پاسختون اما روش بالا جهت دانلود فایل کاربرد داره . من میخواستم به صورت استریم ویدئو پخش بشه اما آدرس مستقیم ویدئو...
۰۰:۳۷:۴۶ ۱۳۹۹/۰۳/۲۷
در انتظار بررسی: ۳