当前位置: 首页 > 面试题库 >

MySQL正在将我的时间戳值转换为0000-00-00

桂高昂
2023-03-14
问题内容

我是PHP的新手,目前仍在学习。我认为我的注册表存在问题。usernamepasswordemail所有插入到MySQL成功。registered而且last_seen不要。

我以为我用getTimestamp()错了,但这与我的需要相呼应。但是,当我尝试将两个时间戳字段都插入MySql时,我看到的0000-00-00 00:00:00是这些字段,而不是它在sql查询之前回显的内容。我在这里做错了什么?任何帮助深表感谢。

    $date = new DateTime();
    $time = $date->getTimestamp();

    echo '<div class="box_grey">' . $time . '</div>';

    $sql = '    INSERT INTO users (username, password, email, registered, last_seen) 
                VALUES (:username, :password, :email, :registered, :last_seen)';
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':username', $username);
    $stmt->bindParam(':password', $password);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':registered', $time);
    $stmt->bindParam(':last_seen', $time);
    $stmt->execute();

    print '<div class="box_grey">errorCode() ' . $stmt->errorCode() . '<br /><br />';
    print_r($stmt->errorInfo());

    echo '</div>';

    echo '<div class="box_grey">Registered successfully!</div>';

这就是SHOW CREATE TABLE users;给我看的东西。

CREATE TABLE `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'User''s unique ID number', 聽
    `username` varchar(16) NOT NULL, 聽
    `password` varchar(100) NOT NULL, 聽
    `email` varchar(254) NOT NULL, 聽
    `registered` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 聽
    `last_seen` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 聽
PRIMARY KEY (`id`)) 
ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

问题答案:

这种情况经常发生。
您将mysql时间戳与UNIX时间戳(实际上是DATETIME类似的值)和UNIX时间戳混淆了,后者是自1970-01-01起经过的秒数。

您需要更改字段格式或插入值。
您也可以找到一些方便的mysql函数-例如CURDATE()或NOW()

$sql = 'INSERT INTO users VALUES (NULL,:username,:password,:email,NOW(),NOW())';
$stmt = $pdo->prepare($sql);
$stmt->execute(array($username, $password, $email));

但是我个人会避免使用mysql时间戳。它们可能会意外更改,从而破坏了您的所有数据。我会使用DATETIME并手动设置所有值。



 类似资料:
  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 问题内容: 字段定义 二传手 有谁知道如何将“零日期”转换为适当的值?因为我有错误: 即使我像这样设置“默认”字段和设置器: 我仍然会有同样的问题。 问题答案: 在这里,我将大胆猜测您正在使用MySQL :-)它使用“零日期”作为特殊占位符 -不幸的是,JDBC默认情况下无法处理它们。 解决方案是将“ zeroDateTimeBehavior = convertToNull”指定为MySQL连接的

  • 问题内容: 字段定义 二传手 有谁知道如何将“零日期”转换为适当的值?因为我有错误: 即使我像这样设置“默认”字段和设置器: 我仍然会有同样的问题。 问题答案: 在这里,我将做出一个疯狂的猜测,即您正在使用MySQL :-)它使用“零日期”作为特殊的占位符 -不幸的是,默认情况下JDBC无法处理它们。 解决方案是将“ zeroDateTimeBehavior = convertToNull”指定为

  • 问题内容: 我需要在数据库上更改一些值。 我忘记为表格设置可空值,并且默认情况下将其设置为0000-00-00 00:00:00。 现在,我需要将该值转换为。 字段类型为“日期时间”。 我该怎么做? 我尝试使用典型的方法,但是它不起作用。 问题答案: 您首先需要将该列设置为可空: 然后更新值:

  • 我最近从日历切换到joda time LocalDate,以避免项目中的时区问题(我不需要时区)。在某个时候,我需要从LocalDate获得时间戳: 由于某种原因,我无法理解,在将localdate转换为时间戳后,结果会返回到前一天的23:00。为什么?

  • 问题内容: 如何将字段的默认值设置为“ 0000-00-00 00:00:00”?如果我们不能使用“ 0000-00-00 00:00:00”作为默认值?什么是 基本 有效tiemdate? 例如,这是用于创建我的商品表的SQL, 运行此查询时出现此错误, 问题答案: 错误原因:SQL模式 您可以设置的默认值,或场特殊的“零”作为虚拟日期“0000-00-00”值,如果SQL模式允许它。对于低于5