PHP - 将日期插入MySQL时出错

时间:2010-05-06 10:39:12

标签: php mysql date

我在尝试向MySQL插入日期时遇到了一个典型的问题。

MySQL中定义的列的类型为DATE。我的PHP版本是5.3.0

除了这个与日期相关的问题外,我的其余代码工作得很好。

这是我的PHP脚本:

$tablename = BOOKS_TABLE;
    $insert = mysql_query("INSERT INTO $tablename (barcode, book_name, volume_num,".
    " author, publisher, item_type, buy_price, buy_date) VALUES ".
    "(".
        "'" . $barcode      . "', ".
        "'" . $bookname     . "', ".
        "'" . $volumenum    . "', ".
        "'" . $author       . "', ".
        "'" . $publisher    . "', ".
        "'" . $itemtype     . "', ".
        "'" . $buyprice     . "', ".
        "'" . getMySQLDateString($buydate). "'".
        //"'STR_TO_DATE('".$buydate ."', '%d/%m/%Y'))'". //nothing changes in MySQL
    ")");

这是错误的功能:

function getMySQLDateString($buydate) //typical buydate : 04/21/2009
{
    $mysqlDateString = date('Y-m-d H:i:s', $strtotime($buydate)); 

    return $mysqlDateString;
}

第一个注释掉的行不会执行任何操作,脚本执行时没有错误,但是,此后数据库中没有任何更改。

当前方法将导致致命错误,说明函数名称必须是此行中的字符串。

实际上我跟着this thread on SO,但是无法将日期传递给MySQL ...

任何人都可以帮我弄清哪个部分不对吗?

在这种情况下,你会如何做到这一点?

对于这样一个类似熟练工的问题感到抱歉,非常感谢。

更新:

感谢您提醒我这一点,以下是html输出的确切错误消息:

致命错误:函数名称必须是第85行的C:\ xampp \ htdocs \ comic \ app \ insertBookIntoDB.php中的字符串

指向该行以

开头
$mysqlDateString = date('Y-m-d H:i:s', $strtotime($buydate));

4 个答案:

答案 0 :(得分:2)

在以下行中:

$mysqlDateString = date('Y-m-d H:i:s', $strtotime($buydate)); 

应该是:

$mysqlDateString = date('Y-m-d H:i:s', strtotime($buydate)); 

(例如,删除功能上的美元)?

答案 1 :(得分:1)

不确定是否是您的问题的原因,但您似乎错过了此处的结束:

 "'" . getMySQLDateString($buydate).

应该是

 "'" . getMySQLDateString($buydate)."'"

答案 2 :(得分:1)

这必须是注释,但为了代码格式化。

尽管格式很花哨,但是你的代码可以帮助你解决这种情况 为了使它更有用,你必须在其中添加一些调试功能 明智的变量名也有助于 以及从字符串构建中删除函数调用

$sqldate = getMySQLDateString($buydate);
$sqldate = mysql_real_escape_string($sqldate);
//we name this variable $sql because it contains an SQL query
$sql = "INSERT INTO $tablename (barcode, book_name, volume_num,
        author, publisher, item_type, buy_price, buy_date) VALUES 
        (
        '$barcode',
        '$bookname',
        '$volumenum',
        '$author',
        '$publisher',
        '$itemtype',
        '$buyprice',
        '$sqldate'
        )";
//we name this variable $res because it's a resource 
//type variable contains query result
$res = mysql_query($sql) or trigger_error(mysql_error().htmlspecialchars($sql));

执行后,此代码将告诉您有关错误的全面信息(如果有)。

答案 3 :(得分:0)

在我看来,使用显式日期格式存储日期很烦人,并且所有字符串转换都会让我感到烦恼。我建议在日期字段中使用BIGINT,并在数据库中存储一个纪元时间值。

你可以用PHP获得纪元时间:

time();

或者,更精确:

microtime();

另外,您可以轻松操控它们。要将日期更改为第二天:

$myTime + 86400;

此纪元时间格式非常易于存储和使用,并且不会被所有字符串转换无意义错误所造成。要从值中获得整齐的字符串:

date("FORMAT STRING", $myTime);