我在将$ 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')";
答案 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
(在我的示例中) )类型为DateTime
或Date
且不 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` ....
请注意,我在此示例中不使用任何类型的MySQLi或PDO prepared statements;你应该阅读SQL injection,然后阅读这些主题,然后回到你的代码。
答案 3 :(得分:-1)
您可以使用php类Date并使用他的格式函数