مباحث عمومی در MySQL

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
فهرست مطالب:

  1. خطایابی دستورات اجرا شده با تابع mysql_query در PHP ، برای کار با پایگاه داده MySQL ، با دستور mysql_error در PHP
  2. نحوه ایجاد قابل اجرا بودن صفحات سایت، هم در هاست خانگی و هم در هاست اصلی، با وجود ویژگی های متفاوت پایگاه های داده (database) موجود در دو هاست، با کدهای PHP
  3. جلوگیری از خطای No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration ، هنگام وارد کردن (import) فایل پشتیبان از پایگاه داده (database) و جدول ها (tables)، در MySQL
  4. چگونگی به کار بردن کلمات رزرو شده (Reserved Words) در یک query ، در MySQL
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
خطایابی دستورات اجرا شده با تابع mysql_query در PHP ، برای کار با پایگاه داده MySQL ، با دستور mysql_error در PHP

خطایابی دستورات اجرا شده با تابع mysql_query در PHP ، برای کار با پایگاه داده MySQL ، با دستور mysql_error در PHP

همان طور که می دانید، تابع mysql_query در PHP ، برای اجرای دستورات مربوط به کار با پایگاه های داده MySQL به کار می رود. نکته مهم در این است که هنگامی که یک دستور مربوط به MySQL را درون تابع mysql_query می نویسیم تا با آن، با پایگاه های داده MySQL کار کنیم، اگر دستور نوشته شده درون تابع mysql_query ، غلط باشد، PHP هیچ پیام خطایی نمایش داده نمی شود. بنابراین نه آنچه ما می خواسته ایم انجام شود، انجام شده و نه پیام خطایی نمایش داده می شود که به ما اخطار دهد. راه حل این مشکل، استفاده از تابع mysql_error به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000088]$A[/COLOR][COLOR=#339933]=[/COLOR][COLOR=#990000]mysql_query[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"یک دستور برای کار با پایگاه داده"[/COLOR][COLOR=#339933],[/COLOR][COLOR=#000088]$con[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#B1B100]if[/COLOR] [COLOR=#009900]([/COLOR][COLOR=#000088]$A[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]
    [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"عملیات با موفقیت انجام شد"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][COLOR=#B1B100]else[/COLOR][COLOR=#009900]{[/COLOR]
    [COLOR=#B1B100]echo[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"به دلیل مشکل زیر، عملیات انجام نشد : <br />"[/COLOR] [COLOR=#339933].[/COLOR] [COLOR=#990000]mysql_error[/COLOR][COLOR=#009900]([/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
با کد بالا، اگر خطایی در هنگام کار با پایگاه داده رخ بدهد، تابع mysql_error ، عبارت مربوط به خطا را در خروجی نمایش خواهد داد. دقت کنید که به جای عبارت ((یک دستور برای کار با پایگاه داده)) که در کد بالا نوشته ایم، باید دستور مورد نظرتان برای کار با پایگاه داده را بنویسید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
نحوه ایجاد قابل اجرا بودن صفحات سایت، هم در هاست خانگی و هم در هاست اصلی، با وجود ویژگی های متفاوت پایگاه های داده موجود در دوهاست

نحوه ایجاد قابل اجرا بودن صفحات سایت، هم در هاست خانگی و هم در هاست اصلی، با وجود ویژگی های متفاوت پایگاه های داده موجود در دوهاست

نحوه ایجاد قابل اجرا بودن صفحات سایت، هم در هاست خانگی و هم در هاست اصلی، با وجود ویژگی های متفاوت پایگاه های داده (database) موجود در دو هاست، با کدهای PHP :


همان طور که می دانید، اکثر سایت ها، از پایگاه های داده (database)، مثلا پایگاه داده MySQL ، برای سایت خود استفاده می کنند. معمولا هم، مدیر سایت، یک نسخه از سایت را بر روی هاست خانگی خود دارد تا تغییرات مورد نظرش را ابتدا به آن اعمال کند و سپس اگر مشاهده کرد که هیج مشکلی ندارد، فایل ها را در هاست اصلی، بارگذاری (upload) می کند و یا تغییرات پایگاه داده را به پایگاه داده موجود در هاست اصلی، اعمال خواهد کرد. بنابراین، مدیر سایت، دو نسخه از سایت را دارد، یکی بر روی هاست اصلی و دیگری بر روی هاست خانگی که برای تست تغییرات است. هاست خانگی، معمولا با نرم افزارهایی مثل wamp server شبیه سازی می شود.

گاهی ممکن است که مشخصات مربوط به پایگاه داده موجود در هاست خانگی، با مشخصات موجود در هاست اصلی، متفاوت باشد. مثلا فرض کنید که نام هر دو پایگاه داده، برابر باشد اما نام و رمز عبور کاربری که به پایگاه داده، دسترسی دارد متفاوت باشد. در اینگونه مواقع، باید کدها را به گونه ای بنویسیم که هنگام بارگذاری فایل ها در هاست اصلی، نیازی به تغییر این موارد نباشد و در واقع، صفحات سایت، هم در هاست خانگی و هم در هاست اصلی، به درستی کار کنند.

به عنوان مثال، کدهای لازم برای اتصال به پایگاه داده MySQL را به صورت زیر می نویسیم (فرض کرده ایم که دامنه سایت برابر www.www.iran-eng.ir می باشد) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#666666][I]// اتصال به پایگاه داده[/I][/COLOR]
[COLOR=#000088]$page_url[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"http://[COLOR=#006699][B]$_SERVER[HTTP_HOST][/B][/COLOR][COLOR=#006699][B]$_SERVER[REQUEST_URI][/B][/COLOR]"[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#B1B100]if[/COLOR][COLOR=#009900]([/COLOR][COLOR=#990000]strstr[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$page_url[/COLOR][COLOR=#339933],[/COLOR][COLOR=#0000FF]'http://localhost/www.www.iran-eng.ir/'[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#339933]||[/COLOR][COLOR=#990000]strstr[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$page_url[/COLOR][COLOR=#339933],[/COLOR][COLOR=#0000FF]'localhost/www.www.iran-eng.ir/'[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900]{[/COLOR]  [COLOR=#666666][I]// in home[/I][/COLOR]
    [COLOR=#000088]$con[/COLOR][COLOR=#339933]=[/COLOR][COLOR=#990000]mysql_connect[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]'hostname_1'[/COLOR][COLOR=#339933],[/COLOR][COLOR=#0000FF]'username_1'[/COLOR][COLOR=#339933],[/COLOR][COLOR=#0000FF]'password_1'[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#990000]mysql_select_db[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"database_name_1"[/COLOR][COLOR=#339933],[/COLOR][COLOR=#000088]$con[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][COLOR=#B1B100]else[/COLOR][COLOR=#009900]{[/COLOR]  [COLOR=#666666][I]// in web[/I][/COLOR]
    [COLOR=#000088]$con[/COLOR][COLOR=#339933]=[/COLOR][COLOR=#990000]mysql_connect[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]'hostname_2'[/COLOR][COLOR=#339933],[/COLOR][COLOR=#0000FF]'username_2'[/COLOR][COLOR=#339933],[/COLOR][COLOR=#0000FF]'password_2'[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    [COLOR=#990000]mysql_select_db[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000FF]"database_name_2"[/COLOR][COLOR=#339933],[/COLOR][COLOR=#000088]$con[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
[COLOR=#009900]}[/COLOR][/FONT]
[/FONT][/COLOR]
ابتدا با خط زیر از کدها، آدرس URL صفحه فعلی که کاربر آن را مشاهده می کند را در متغیری با نام page_url ذخیره می کنیم :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#000088]$page_url[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#0000FF]"http://[COLOR=#006699][B]$_SERVER[HTTP_HOST][/B][/COLOR][COLOR=#006699][B]$_SERVER[REQUEST_URI][/B][/COLOR]"[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
سپس با تابع strstr چک می کنیم که آیا آدرس URL فعلی، با عبارت های http://localhost/www.www.iran-eng.ir/ یا localhost/www.www.iran-eng.ir/ دارای اشتراک می باشد یا خیر. اگر با یگی از این دو عبارت، اشتراک داشته باشد، یعنی صفحه در هاست خانگی اجرا شده است (از localhost نوشته شده در آن، می توان متوجه شد). بنابراین، بر این اساس و با دستور if ، دو حالت اجرا در هاست خانگی و اجرا در هاست اصلی را از هم جدا کرده و برای هر کدام، به صورت جداگانه، کدهای مربوط به اتصال به پایگاه داده MySQL را می نویسیم.

چون نام جدول های هر دو پایگاه داده، برابر است (نام جدول ها برابر هستند و در phpMyAdmin می توان جدول ها را تغییر داد)، بنابراین سایر کدها، برای هر دو حالت، مشابه می باشد.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
جلوگیری از خطای No data was received to importهنگام وارد کردن (import) فایل پشتیبان از پایگاه داده (database) و جدول ها (tables)

جلوگیری از خطای No data was received to importهنگام وارد کردن (import) فایل پشتیبان از پایگاه داده (database) و جدول ها (tables)

جلوگیری از خطای No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration ، هنگام وارد کردن (import) فایل پشتیبان از پایگاه داده (database) و جدول ها (tables)، در MySQL :


گاهی اوقات، هنگامی که می خواهیم اطلاعات یک فایل پشتیبان (backup) از پایگاه داده (database) و جدول ها (tables) را وارد (import) کنیم، خطای زیر ایجاد شود :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]No data was received to import[COLOR=#339933].[/COLOR] Either no [COLOR=#990000]file[/COLOR] name was submitted[COLOR=#339933],[/COLOR] or the [COLOR=#990000]file[/COLOR] size exceeded the maximum size permitted by your PHP configuration[COLOR=#339933].[/COLOR] See FAQ [COLOR=#800080]1.16[/COLOR][COLOR=#339933].[/COLOR][/FONT]
[/FONT][/COLOR]
ایجاد این خطا، به دلیل محدودیت در حداکثر حجم مجاز برای آپلود فایل در PHP می باشد (زیرا ابتدا باید فایل پشتیبان، آپلود شود)، بنابراین با تغییر تنظیمات PHP ، می توان این مشکل را برطرف کرد.

اگر در هاست خود و یا در کامپیوتر خانگی خود (با نرم افزار wampserver)، به myPhpAdmin دسترسی دارید، وارد آن بشوید و سپس گزینه Import را انتخاب کنید. آنگاه در کنار گزینه مربوط به آپلود فایل پشتیبان (backup)، حداکثر حجم برای آپلود فایل ها توسط PHP ، نوشته شده است :

mysql-50.png


مشاهده می کنید که حداکثر حجم برای آپلود فایل، برابر 20 مگابایت نوشته شده است (قبلا برابر 2 مگابایت بود، اما من آن را به 20 مگابایت تغییر داده ام. در ادامه، نحوه این کار را شرح خواهم داد).

برای تغییر تنظیمات مورد نظرمان، باید در فولدری که در آن فایل های PHP (فایل های اصلی PHP ، نه کدهایی که ما در سایتمان قرار داده ایم) قرار داده شده است، فایل php.ini را باز کرده و برخی از مقادیر تعریف شده در آن را تغییر بدهیم. دقت کنید که معمولا سرورها، دسترسی به فایل های اصلی PHP را به شما نمی دهند، در این صورت، می توانید به صاحب سرور، درخواست تغییرات را بدهید (البته معمولا خود صاحبان سرورها، بهترین تنظیمات را انتخاب می کنند).

پس از باز کردن فایل php.ini ، مقادیر مهم و تاثیرگذار در آپلود فایل ها، عبارتند از :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]upload_max_filesize [COLOR=#339933]=[/COLOR] 10M 
post_max_size [COLOR=#339933]=[/COLOR] 20M 
memory_limit [COLOR=#339933]=[/COLOR] 128M
max_execution_time [COLOR=#CC66CC]300[/COLOR][/FONT]
[/FONT][/COLOR]
من مقادیری دلخواه را در کدهای بالا، برای آنها نوشته ام. دقت کنید که هر یک از این پارامترها را باید در فایل پیدا کرده و سپس بر اساس نیاز خود، یک مقدار را به آنها اختصاص بدهید. مثلا من پارامتر upload_max_filesize را برابر 10 مگابایت قرار داده ام که برای آپلود فایل های دارای حداکثر حجم 10 مگابایت، مناسب می باشد. پارامتر memory_limit بهتر است که از upload_max_filesize بزرگتر باشد، من آن را دو برابر upload_max_filesize انتخاب کرده ام. پارامتر max_execution_time برابر حداکثر زمان اجرای کدهای PHP است که من آن را برابر 300 ثانیه، یعنی 5 دقیقه، انتخاب کرده ام، اگر حدس می زنید که زمان آپلود یک فایل بزرگ، بیشتر است، بنابراین باید این زمان را هم به همان نسبت، افزایش بدهید.


[h=2]اعمال تنظیمات در نرم افزار wampserver نصب شده بر روی کامپیوتر خانگی :[/h]اگر نرم افزار wampserver را در کامپیوتر خانگی خود نصب کرده اید و در حال تست آن می باشید، باید فایل php.ini صحیح را به شما نشان بدهم زیرا ممکن است که به اشتباه، یک فایل دیگر را ویرایش کنید. ابتدا به فولدر محل نصب نرم افزار wampserver بروید و سپس مسیر زیر را دنبال کنید :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace][COLOR=#339933]../[/COLOR]bin[COLOR=#339933]/[/COLOR]apache[COLOR=#339933]/[/COLOR]Apache2[COLOR=#339933].[/COLOR]2[COLOR=#339933].[/COLOR]21[COLOR=#339933]/[/COLOR]bin[COLOR=#339933]/[/COLOR][/FONT]
[/FONT][/COLOR]
که البته احتمالا شماره Apache متفاوت است، که اهمیتی ندارد. بنابراین فایل php.ini را در آن مسیر بیابید و سپس تغییراتی که گفته شده را به آن اعمال نمایید. باز هم تذکر می دهم که به مسیر فایل php.ini دقت کنید، زیرا فایل دیگری با همین نام در فولدری دیگر وجود دارد و ممکن است که آن را به جای این فایل، به اشتباه ویرایش کنید.
 

P O U R I A

مدیر مهندسی شیمی مدیر تالار گفتگوی آزاد
مدیر تالار
چگونگی به کار بردن کلمات رزرو شده (Reserved Words) در یک query ، در MySQL

چگونگی به کار بردن کلمات رزرو شده (Reserved Words) در یک query ، در MySQL

کلماتی که دارای معنی خاص در نوشتن query ها می باشند، کلمات رزرو شده (Reserved Words) نامیده می شوند. به دلیل معنی و کاربرد خاص آنها، اگر جدول ها (tables) یا ستون ها (columns) یا موارد دیگری، به صورت هم نام با آنها داشته باشیم، آنگاه نوشتن query به صورت عادی امکان پذیر نمی باشد. زیرا همان معنی خاص آنها در query تفسیر می شود و بنابراین با خطا روبرو خواهیم شد.

برای جلوگیری از خطا، چنانچه یک کلمه رزرو شده (Reserved Words) را مثلا به عنوان نام یک جدول می خواهیم به کار ببریم، باید آن کلمه را در بین دو علامت زیر قرار بدهیم (علامت را کپی کنید، ممکن است آن را با علامت ' اشتباه بگیرید) :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]``[/FONT]
[/FONT][/COLOR]
مثلا فرض کنید که بخواهیم کلمه رزرو شده interval را در یک query به کار ببریم. query زیر یک خطا را ایجاد می کند :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]CREATE TABLE interval [COLOR=#009900]([/COLOR]begin INT[COLOR=#339933],[/COLOR] [COLOR=#990000]end[/COLOR] INT[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
بنابراین شیوه صحیح نوشتن آن، به صورت زیر می باشد :
کد:
[COLOR=#000000][FONT=Tahoma][FONT=monospace]CREATE TABLE `interval` [COLOR=#009900]([/COLOR]begin INT[COLOR=#339933],[/COLOR] [COLOR=#990000]end[/COLOR] INT[COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR][/FONT]
[/FONT][/COLOR]
 

Similar threads

بالا