通过PDO将时间()保存为MySQL中的INTEGER时间戳,因为phpMyAdmin说`timestamp`是数字

时间:2016-07-09 15:36:11

标签: php mysql pdo phpmyadmin

如何通过PHP中的PDO将timestamp作为integer号码发送到MySQL? 我不喜欢将时间作为字符串发送,我想将它们作为纯integer发送(作为UNIX TIME)。 phpMyadmin help on TIMESTAMP format

这是我的代码,但它保存了ZERO时间戳:

$sql = 'REPLACE INTO table_name (id,sent_timestamp) VALUES (:id,:sent_timestamp);';
$stmt =   $pdo->prepare($sql);

$stmt->bindValue(':id',$id,PDO::PARAM_INT);
$stmt->bindValue(':sent_timestamp',time(),PDO::PARAM_INT); // I define this column in phpMyadmin as TIMESTAMP type.

$stmt->execute();

id是唯一的,sql查询正在运行,但timestamp保存为ZERO。     我还将time()替换为123456之类的任意数字,但它也在DB中保存为零。

更新:由于更多research而感谢@Hanky Panky, 这是令人困惑的:为什么phpMyadmin表示它将timestamp存储为秒数但我们无法将timestamp作为integer发送。 是否有任何对我们无法以整数形式发送的项目的引用?

5 个答案:

答案 0 :(得分:0)

MySQL中的TIMESTAMPYYYY-MM-DD HH:MM:SS[.fraction]格式的字符串。 可选的小数部分允许将值存储到微秒的精度。 TIMESTAMP值的允许范围为1970-01-01 00:00:01.0000002038-01-19 03:14:07.999999

在查询中,您尝试将整数值存储到TIMESTAMP字段中。要使其正常工作,您必须发送有效的TIMESTAMP值:

$date = new Datetime('now');
$stmt->bindValue(':sent_timestamp', $date->format('Y-m-d H:i:s'), PDO::PARAM_STRING);

phpmyadmin尝试解释的是TIMESTAMP值内部存储为整数。但对我们这些重要的PHP程序员来说,TIMESTAMP值被视为字符串,如上所述。

请记住,MySQL的权威来源是the MySQL manual,而不是phpmyadmin给出的解释。

答案 1 :(得分:0)

使用FROM_UNIXTIME()

查看答案

saving-timestamp-in-mysql-table-using-php

答案 2 :(得分:0)

希望这能解决您的问题。谢谢 Create a table

Add a row

Check the result

答案 3 :(得分:0)

  

Mysql时间戳要求邮票格式为' Y-m-d H:i:s'

您可能会收到0000,因为您告诉PDO将其存储为INT。从bindValue语句中删除PDO::PARAM_INT

因此,您可以将time()存储为这样的时间戳:

$stmt->bindValue(':sent_timestamp',date("Y-m-d H:i:s", time()));

答案 4 :(得分:-1)

特别感谢发送答案,但不幸的是,他们不是我的问题的答案。 希望经过几个小时的搜索后我找到了答案:

我们可以将TIMESTAMP作为整数发送。我们可以用YYYYMMDDHHMMSS格式和其他格式发送它。无效时间解释为ZEOR。 所以这段代码完美无缺:

$stmt->bindValue(':sent_timestamp',20160709120000,PDO::PARAM_INT); //2016-07-09-12:00:00

MySQL Refernce says:

MySQL以这些格式识别DATETIME和TIMESTAMP值:

作为YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的数字,前提是该数字作为日期有意义。例如,19830905132800和830905132800被解释为'1983-09-05 13:28:00'。

  

所以由于这个文档,发送unix-time是不可能   输入整数 - 例如14973898(1970-01-01-00-00之后的秒)   TIMESTAMP类型字段但是 可能以发送整数   YYYYMMDDHHMMSS和YYMMDDHHMMSS格式(如20160709120000那个   代表2016-07-09-12:00:00)

更新:我在数字上的错误,它应该是14位数,我错误地错误输了12位数。