操作方法:wpdb插入带有日期的记录

时间:2013-04-24 作者:clockwiseq

我正在编写一个插件,需要在激活时创建的自定义表中预加载一些数据。到目前为止,我的插入一直运行良好,直到我尝试插入具有日期数据类型的记录。有人能告诉我这里出了什么问题吗?

数据库表定义:

$sql =  "CREATE TABLE IF NOT EXISTS " . $wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE. " (
                  id mediumint(12) NOT NULL AUTO_INCREMENT,
                  academicyear VARCHAR(200) NOT NULL,
                  begin_date date NOT NULL,
                  end_date date NOT NULL,
                  created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                PRIMARY KEY (id));";

    $wpdb->query($sql);
数据库插入:

$current_year = array(
            \'academicyear\' => \'2012 - 2013\',
            \'begin_date\'   => date(\'Y-m-d\', \'2012-08-14\'),
            \'end-date\'     => date(\'Y-m-d\', \'2013-05-31\')
        );

        $wpdb->insert($wpdb->prefix.SSM_ACADEMIC_YEAR_TABLE, $current_year);
我尝试过许多不同的方法,比如仅仅使用=>“2012-08-14”,但这也不起作用。我肯定有一些语法我要么丢失了,要么错了。

3 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

date 不接受人类可读的字符串。它需要Unix timestamp. 您需要使用将该人工日期转换为时间戳strtotime.

\'begin_date\'   => date(\'Y-m-d\', strtotime(\'2012-08-14\')),
当然,实际上没有必要将年月日日期转换为时间戳,只需将其转换回年月日格式即可。

SO网友:Ni Xiaoni

您可以只使用该函数current_time. 例如:

<?php $time = current_time( \'mysql\' ); ?>
函数将返回mysql所需的日期时间字符串。

您可以找到更多详细信息here. 如果您对“时区编程问题”感兴趣,您愿意阅读本文Managing times & dates in WordPress.

SO网友:Lovor

公认的答案不正确。您可以将字符串日期格式传递给数据库,只要它们的格式是数据库可以理解的(例如。2022-01-15T20:34:342022-01-15 20:34:34). 你可以找到mariadb specifications here, 我很确定它们和MySQL是一样的。

结束

相关推荐

插件生成了%x个字符的意外输出,未定义$wpdb

我编写了一个简单的Wordpress插件来创建一个新的数据库表。应该在插件激活时创建新表。当我尝试激活插件时,出现以下错误:The plugin generated 3989 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or