如何通过PHP中的PDO将timestamp
作为integer
号码发送到MySQL?
我不喜欢将时间作为字符串发送,我想将它们作为纯integer
发送(作为UNIX TIME)。
这是我的代码,但它保存了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
发送。
是否有任何对我们无法以整数形式发送的项目的引用?
答案 0 :(得分:0)
MySQL中的TIMESTAMP是YYYY-MM-DD HH:MM:SS[.fraction]
格式的字符串。
可选的小数部分允许将值存储到微秒的精度。
TIMESTAMP值的允许范围为1970-01-01 00:00:01.000000
到2038-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()
答案 2 :(得分:0)
答案 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以这些格式识别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位数。