我有以下 PHP 代码,用于将 session 数据插入到名为 ds_session 的表中:
// session does not exists create insert statement
$insertSQL = 'INSERT INTO ds_session (session_id, user_agent, session_expire, date_created, session_data)
VALUES (:SESSION_ID, :USER_AGENT, :SESSION_EXPIRE, :DATE_CREATED, :SESSION_DATA)';
$insertStmt = $this->pdo->prepare($insertSQL);
$insertStmt->bindParam(':SESSION_ID', $id);
$insertStmt->bindParam(':USER_AGENT', $_SERVER['HTTP_USER_AGENT']);
$insertStmt->bindParam(':SESSION_EXPIRE', $time);
$insertStmt->bindParam(':DATE_CREATED', time());
$insertStmt->bindParam(':SESSION_DATA', $sessData);
$insertResult = $insertStmt->execute();
我的问题是,参数 SESSION_EXPIRE 和 DATE_CREATED 未设置。 表定义如下所示:
CREATE TABLE `ds_session` (
`session_id` varchar(32) NOT NULL default '',
`user_agent` varchar(255) NOT NULL default '',
`session_expire` datetime NOT NULL,
`date_created` datetime NOT NULL,
`session_data` longtext,
PRIMARY KEY (`session_id`),
KEY `session_expire` (`session_expire`)
) ENGINE=MyISAM
这里有什么问题吗?我的 PDOStatement 做错了什么吗?
最佳答案
datetime
值应为字符串,而不是数字。使用FROM_UNIXTIME
转换:
$insertSQL = 'INSERT INTO ds_session (session_id, user_agent, session_expire,
date_created, session_data)
VALUES (:SESSION_ID, :USER_AGENT, FROM_UNIXTIME(:SESSION_EXPIRE),
FROM_UNIXTIME(:DATE_CREATED), :SESSION_DATA)';
关于php - PDO bindParam 时间戳未插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908042/