使用php将$ date变量存储到mysql数据库中

时间:2013-06-03 19:56:55

标签: php mysql

我在将$ date变量存储在名为varchar(50)类型的数据的数据库列中时遇到问题

这是日期变量的代码

$date = date("Y-m-d");
echo $date;

这是将其存储到数据库中的代码(注意日期是相同的)

我的代码有什么问题

 $sql="INSERT INTO 
    Students(FirstName, LastName,gender,Major,Favorite_courses,GPA,date)
 VALUES 
    ('$_POST[firstname]','$_POST[lastname]','$_POST[sex]','$_POST[major]',
     '$_POST[favorite]','$_POST[GPA]','$date')";

4 个答案:

答案 0 :(得分:4)

将列类型更改为DATE,然后使用SYSDATE作为值在SQL Server上输入当前日期/时间。

另外,请阅读SQL注入!

答案 1 :(得分:2)

从技术上讲,你的代码应该可行,但实际上它无疑会失败。

对于初学者,您永远不应将POST数据直接放入数据库。根据数据中的内容,它至少会破坏您的SQL语句。如果有人将某个SQL输入POST变量,它也可能会破坏您的数据库。

不要这样做。在将数据插入数据库之前,您需要清理来自外部世界的任何数据。有几个PHP数据库类为您执行此操作。我喜欢PDO

另外,使用$ _POST ['favorite']而不是$ _POST [favorite]来编写更好的PHP。如果您在代码define('favorite', 'foobar')中执行此操作会发生什么?

你的代码会找到$ _POST ['foobar']而不是$ _POST ['favorite']。

在将任何内容推向野外之前,您确实需要了解PHP和SQL的知识,否则您将遇到问题。但是继续堵塞,你会得到它。

答案 2 :(得分:1)

除了已提及好几次之外,SQL injection:使用date('c')(或更具体地说:ISO8601 notation)。这将产生如下代码:

$query = "insert into mytable (myfield) values ('" . date('c') . "')";

这将产生如下查询:

insert into mytable (myfield) values ('2013-06-03T22:20:32+02:00')

这是一个不明显的符号,应该始终有效(Y-m-d也可以正常工作,根据您的问题,它只存储没有任何时间的日期)。当使用任何其他符号时,RDBMS始终存在问题,它必须知道它必须在1977年2月12日或1977年12月2日解释02/12/1977。另外,请确保myfield(在我的示例中) )类型为DateTimeDate varchar,并且您在查询字符串中正确地转义reserved words date

select foo, bar, `date`, foobar from mytable....

然而,MySQL似乎“允许”date(因为“MySQL permits some keywords to be used as unquoted identifiers because many people previously used them。”这是一个愚蠢的原因)。最好只是坚持逃避总是

select `foo`, `bar`, `date`, `foobar` from `mytable` ....

请注意,我在此示例中使用任何类型的MySQLiPDO prepared statements;你应该阅读SQL injection,然后阅读这些主题,然后回到你的代码。

答案 3 :(得分:-1)

您可以使用php类Date并使用他的格式函数