دوشنبه ۱۰ دی ۱۴۰۳ |  عضویت / ورود

بهترین راه درج NOW در MySQL با کمک PHP


Sunday, 2016 July 17   نویسنده: Hamid   تعداد بازدید: 3058 بار  #آموزش PHP‏   امتیاز متوسط: امتیازی داده نشده است

یکی از مشکلات بزرگ در کدنویسی به زبان PHP، درج زمان کنونی در دیتابیس MySQL است. اگر شما در دیتابیس فیلدی داشته باشید که بخواهید در آن زمان درج رکورد را ثبت کنید، دو راه پیش رو دارید:

۱- نوع فیلد را timestamp قرار دهید و سپس defualt value مربوط به آن را روی CURRENT_TIMESTAMP تنظیم کنید.

مشکل این روش: این روش متأسفانه timezone مربوط به سرور را ملاک قرار می‌دهد و زمان را مثلاً به ساعت تهران در دیتابیس درج می‌کند. در حالی که ما در برنامه‌نویسی باید حتماً تمام زمان‌ها را بر مبنای لندن (یعنی UTC) درج کنیم.

۲- نوع فیلد را datetime قرار دهید وهنگام درج در دیتابیس به جای مقدار این فیلد از تابع NOW()‎ استفاده کنید.

مشکل این روش: این روش نیز متأسفانه همان مشکل بالا را دارد و زمان را بر اساس UTC درج نمی‌کند.

 

راه حل:

شما نوع فیلد را روی datetime یا همان timestamp قرار دهید و حتی اگر خواستید همان CURRENT_TIMESTAMP را هم به عنوان مقدار پیش‌فرض انتخاب کنید، اما در PHP هنگام درج در دیتابیس، خودتان لحظه فعلی را به UTC به‌دست آورید و به جای NOW از آن استفاده کنید.

به مثال زیر دقت کنید:

http://img.aftab.cc/news/95/current_timestamp-problem_mysql_php.png

به متغیر now و نحوه‌ی استفاده از آن هنگام درج دقت کنید...

با این روش، قطعاً مطمئن هستید که زمان فعلی به UTC در دیتابیس درج می‌شود. (تابع gmdate زمان را به GMT برمی‌گرداند و شما آن‌را در دیتابیس درج می‌کنید)

موفق باشید؛
حمید رضا نیرومند


.



ارسال سؤال یا نظر


1- SHAPARAKPAY:
بوسیله: shaparakpay, در: Wednesday, 2016 July 20-کد: 14625
ممنون استفاده کردیم

Tutorials ©