2013-06-27 40 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

是的,我明白这一点。谢谢。 –

相关问题