0

我在 Wordpress DB 中运行了这个查询,发现预订日期是以某种编码方式存储的。

SELECT post_id, meta_id, post_title, meta_key, meta_value FROM a40443635734677.wp_7n2ncdd4yn_postmeta, a40443635734677.wp_7n2ncdd4yn_posts where post_id = ID and post_type = 'estate_property' and meta_key in ('property_price', 'cancellation', 'booking_dates', 'prop_featured', 'min_days_booking ') and meta_key = 'booking_dates' and post_id = 248 order by post_id; 输出:a:2:{i:1600646400;i:374;i:1600732800;i:374;}

从 UI 显示,预订日期为 2020 年 9 月 21 日至 2020 年 9 月 23 日。

如何将 DB (a:2:{i:1600646400;i:374;i:1600732800;i:374;}) 中的数据解码到这些日期?

4

3 回答 3

1

您可以使用unserialize()将其转换为数组。

$dbdata = 'a:2:{i:1600646400;i:374;i:1600732800;i:374;}';

$dbdata = unserialize($dbdata);

//结果数组 ( 1600646400 => 374, 1600732800 => 374, )

然后使用 PHPs DateTime 转换为人类可读的格式,例如

$returnDate = date('d.m.Y H:i:s', 1600646400);

//结果 21.09.2020 02:00:00

于 2020-09-15T14:18:08.677 回答
0

您向我们展示的更大的一组数字看起来像是纪元(1970 年 1 月 1 日)以来的秒数。您可以使用 MySQL 的FROM_UNIXTIME函数将这些 epoch 值转换为真正的人类可读日期。例如:

SELECT FROM_UNIXTIME(1600646400);  -- 21.09.2020 02:00:00
于 2020-09-15T14:12:35.000 回答
0

那是序列化的数据。使用内置的 PHP unserialize( your output variable here )。您将获得一个数组,因为序列化数据是一个数组(a:2表示具有两个索引的数组)。

日期采用 UNIX 时间。您可以使用 PHPDateTime转换为人类可读的格式。

$output = SELECT post_id, meta_id, post_title, meta_key, meta_value 
FROM a40443635734677.wp_7n2ncdd4yn_postmeta, a40443635734677.wp_7n2ncdd4yn_posts 
where post_id = ID 
and post_type = 'estate_property' 
and meta_key in ('property_price', 'cancellation', 'booking_dates', 'prop_featured', 'min_days_booking') and meta_key = 'booking_dates' 
and post_id = 248 order by post_id;

// Unserialize the data.
$unserialized = unserialize($output);

// Get the date for each array key. The date is the $key, so you pass that to the php date function.
foreach( $unserialized as $key => $date ) {
  echo date('M-d-Y', $key ) . "\n";
}

这将输出您Sept-20-2020提供Sept-21-2020的数据。

于 2020-09-15T14:13:28.577 回答