You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向SQL插入数据时Timestamp无法正确录入的问题求助

解决WordPress中$wpdb->insert插入时间为0000-00-00 00:00:00的问题

我一眼就发现了导致时间插入失败的核心问题,同时也给你几个额外的排查方向:

1. 最直接的原因:格式化占位符数量不匹配

你在调用$wpdb->insert()时,插入的字段数组包含5个元素,但对应的格式占位符数组只有4个,缺少了date字段对应的格式标识!

current_time('mysql')返回的是字符串类型的时间(比如2024-05-20 15:45:30),所以需要给它加上%s占位符。

修正后的log_participant函数代码:

public function log_participant( $product_id, $current_user_id, $ticketnumber, $order_id ) { 
    global $wpdb; 
    $log_bid = $wpdb->insert( 
        $wpdb->prefix . 'wc_lottery_log', 
        array( 
            'userid' => $current_user_id, 
            'lottery_id' => $product_id, 
            'ticketid' => $ticketnumber, 
            'orderid' => $order_id, 
            'date' => current_time( 'mysql' ), 
        ), 
        array( '%d', '%d', '%d', '%s', '%s' ) // 新增对应date的%s占位符
    ); 
    return $wpdb->insert_id; 
}

2. 额外排查点

如果修正后还是有问题,可以检查以下几点:

  • 数据库字段类型:确认wc_lottery_log表的date字段类型是DATETIME或TIMESTAMP,且没有设置错误的约束(比如NOT NULL却没有默认值,同时插入值无效时就会填充0000)。
  • 验证current_time的输出:在函数里临时添加var_dump(current_time('mysql')); exit;,确认它返回的是合法的时间字符串,而不是空值或错误格式。
  • WordPress时区设置:后台进入「设置」→「常规」,检查站点时区是否正确配置,current_time('mysql')会基于这个时区返回时间。

补充小提示

我还注意到你在循环调用log_participant时,传入了5个参数($this->log_participant( $product_id, $order->get_user_id(), $ticketnumber, $order_id, $item );),但函数定义只接受4个参数,这会导致$item参数被忽略,你可以根据实际需求调整函数参数哦。

内容的提问来源于stack exchange,提问作者Shaun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:56:44