我真的很挣扎,希望有人可以提供一些建议。
我正在编写一个简单的基于Web的系统,包括PHP和Mysql数据库。我已经尝试了很多方法来实现我想要的但没有成功。我想要做的只是在每个记录旁边的数据库中存储一个日期时间,并能够计算记录何时为30天。
我不知道问题是由于参数化的mysql绑定还是其他我做错了。
问题1:
将mysql中的记录日期存储为DATETIME字段。但PHP的strToTime()函数似乎无法理解存储的日期时间 - 它总是返回0或1970!我在数据库中存储的所有内容都来自Php的Time()函数。如果我直接在页面上显示它确实是一个日期 - 所以我无法理解为什么strToTime()失败。
问题2: 在上面花了几个小时之后,我尝试将mysql db字段更改为Integer类型并直接存储Unix Timestamp。但是由于某种原因,在检索存储的值时,它永远不会正确地作为int进行转换,以便对其执行计算。我尝试了(int)cast和intval,并且两者都无法将值强制转换为int ..因此,Date()函数不会对返回的值运行。
问题3: 我尝试在DATETIME字段类型和Int字段类型上使用mysql自己的函数UNIX_TIMESTAMP(),但即使这样也会返回为不想作为int进行计算的字符串。
根本没有意义。显然,我做错了什么,但我无法弄清楚是什么。
//用于存储日期时间的代码:
$mysqltime = time();
if ($insert_stmt = $mysqli->prepare("INSERT INTO quotes (quoteID, userID, creation_date) VALUES (?, ?, ?)")) {
$insert_stmt->bind_param( 'sss', $quoteID, $_SESSION['user_id'], $mysqltime);
//代码来演示我正在检索存储日期时间的问题:
if ($stmt = $mysqli->prepare("SELECT UID, title, cust, jtitle, UNIX_TIMESTAMP(creation_date) FROM quotes
WHERE userID = ? && status = ?
")) {
$stmt->bind_param('ss', $_SESSION['user_id'], $status ); // Bind to parameters.
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
// get variables from result.
$stmt->bind_result( $quoteID, $cust_title, $cust_surname, $job_title, $creation_date);
// $stmt->fetch();
$results = gmdate("d-m-Y", (int)$creation_date);
答案 0 :(得分:0)
我个人更喜欢使用mysql over php进行日期和时间管理
使用这样的插入语句:
"INSERT INTO quotes (quoteID, userID, creation_date) VALUES (?, ?, now())"
和一个选择语句,如:
"SELECT UID, title, cust, jtitle, DATE_FORMAT(creation_date,'%d %M %Y')as creation_date".
" FROM quotes WHERE userID = ? && status = ?"