【发布时间】:2009-05-03 08:06:20
【问题描述】:
我正在尝试使用 php 脚本插入日期、时间字段,但出现语法错误。有人可以告诉我,我在哪里做错了。 谢谢大佬们
插入日历(事件,从,到,日) 价值观 ('".$_REQUEST['event']."', '".$_REQUEST['from_time']."', '".$_REQUEST['to_time']."', '".$_REQUEST['date_event']."')
【问题讨论】:
我正在尝试使用 php 脚本插入日期、时间字段,但出现语法错误。有人可以告诉我,我在哪里做错了。 谢谢大佬们
插入日历(事件,从,到,日) 价值观 ('".$_REQUEST['event']."', '".$_REQUEST['from_time']."', '".$_REQUEST['to_time']."', '".$_REQUEST['date_event']."')
【问题讨论】:
要插入到 mySQL 日期时间字段中,字符串必须采用特定格式,以便 mySQL 能够理解。问题是 php 对如何表示日期有自己的想法和想法。在处理两者之间的日期时,您必须进行翻译。
如果在 php 中你正在处理一个时间对象,你可以这样做来得到一个字符串 mySQL 会喜欢:
$mysqlDateString = date('Y-m-d H:i:s', $phpdate);
或者如果您正在处理字符串日期,您可以这样做:
$mysqlDateString = date('Y-m-d H:i:s', $strtotime("08/09/2009"));
如果你从 mySQL 中得到一个日期时间字符串,你可以用 PHP 来处理它:
$phpTime = strtotime($mysqlDateString);
我自己也遇到了这个问题,所以希望这对你也有用。
【讨论】:
切勿在未清理数据的情况下将字符串数据插入 sql 语句,否则会导致 sql 注入(有意或无意注入),请参阅http://php.net/mysql_real_escape_string
如果您没有安装调试器,让 php 打印 sql 语句以便您检查它。
格式化和缩进您的 sql 查询。它们更容易阅读和调试。
始终检查 mysql_query() 的返回值。如果为 FALSE,则查询失败,mysql_errno() 或 mysql_error() 可以告诉您有关错误原因的更多信息。
如果您想使用也是 reserved word for MySQL 的标识符,您几乎总是必须将其放在反引号 (`) 或双引号中(在 ansi 模式下)。
MySQL 理解的日期/时间文字格式在http://dev.mysql.com/doc/refman/5.0/en/date-and-time-types.html 进行了解释
使用 _REQUEST 进行 INSERT 操作可能会有问题......但我让其他人来回答 ;-)
<?php
$mysql = mysql_connect...
$query = "
INSERT INTO
`calendar`
(`event`, `from`, `to`, `day`)
VALUES
(
'" . mysql_real_escape_string($_REQUEST['event'], $mysql) ."',
'" . mysql_real_escape_string($_REQUEST['from_time'], $mysql) ."',
'" . mysql_real_escape_string($_REQUEST['to_time'], $mysql) ."',
'" . mysql_real_escape_string($_REQUEST['date_event'], $mysql]) ."'
)
";
echo '<pre>$query=', htmlspecialchars($query), '</pre>';
$result = mysql_query($query, $mysql);
if ( !$result ) {
echo 'error: ', mysql_error($mysql);
}
顺便说一句:改用prepared statements。
【讨论】: