我在尝试向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));
答案 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);