2013-06-27 39 views
0

在我的MySQL數據庫post_time字段的值已設置爲NOT NULL DEFAULT CURRENT_TIMESTAMP插入當前時間到MySQL數據庫基於特定時區

我用下面的MySQL insert語法和HTML表單從參觀者收集數據,其中日期&當提交表單時,該帖子的時間通過隱藏字段被插入到MySql數據庫中。

$insertSQL = sprintf("INSERT INTO entry (post, post_time) VALUES (%s, %s)",      
GetSQLValueString($_POST['post'], "text"), 
GetSQLValueString($_POST['post_time'], "date")); 

<form action="<?php echo $editFormAction;?>" method="post" name="form1" id="form1"> 
    <table width="50%" align="center"> 
     <tr valign="baseline"> 
     <td align="right" nowrap="nowrap">Post:</td> 
     <td> 
     <textarea name="post" cols="50" rows="5"></textarea> 
     </td> 
     </tr> 
     <tr valign="baseline"> 
     <td align="right" nowrap="nowrap"> 
     <input type="hidden" name="post_time" value="<?php echo $_POST['TIMESTAMP DEFAULT CURRENT_TIMESTAMP']; ?>" /> 
     <input type="hidden" name="MM_insert" value="form1" /> 
     </td> 
     <td> 
<input type="submit" name="submit_post" value="Submit Post" /> 
     </td> 
     </tr> 
    </table> 
    </form> 

我怎麼能收集(服務器已基於GMT時區),基於預定義的時區一個共享服務器上的日期&時間數據?

那我該如何執行下面的sql語法呢?

被修改:

SET的time_zone = '美國/紐約';

感謝,

+0

這是使用'mysql_query'的[可能](http://stackoverflow.com/questions/4458180/php-getsqlvaluestring-function),這意味着它使用了將在未來版本的PHP中被刪除的棄用函數。這樣逃避是有風險的。 [學習PDO](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/)並不難,它會使你的應用程序兼容PHP的新版本。 – tadman

+1

我將方便地切換到「MySqli」或「PDO」。 –

+0

PDO比'mysqli'更強大一點,它支持命名佔位符,使您的查詢更具可讀性。 'mysqli'適用於PDO不可用的情況。 – tadman

回答

1

設置post_timeCURRENT_TIMESTAMP默認值,MySQL將自動更新該列。除非要覆蓋它,否則不需要設置它。

設置date_default_timezone_set()對MySQL無關緊要 - 如果MySQL服務器設置了自己的日期,則需要設置時區。

最後,你不應該把post_time隱藏字段放在表單中 - 你的服務器應該(A)產生這個值,或者(B)讓MySQL自動產生這個值。

+0

在這種情況下,我應該如何在共享服務器上更改MySql數據庫的時區?感謝其他有用的信息。 –

+0

可以在'my.ini''default-time-zone ='timezone''中設置,也可以在查詢'SET GLOBAL time_zone = timezone;'中設置GLOBALY。要在每個連接實例上設置它,請通過SET time_zone = timezone;來設置它。時區可以在這裏找到:http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html –

+0

最好保持在UTC數據庫中的所有時間,並在當地時間呈現它們按要求。 – tadman

1

你不應該插入值那樣的,而是寫一個查詢做的:

INSERT INTO entry (post, post_time) VALUES (?, UTC_TIMESTAMP()) 

你在裏面是如何定義的列把價值,而不是你如何插入值。

+0

是的,我明白這一點。謝謝。 –

相關問題