我正在努力使用PHP从MySQL表中存储为LONGTEXT的数组中提取数据。
我正在创建一个通知脚本,该脚本来自两个单独的表格('事件'以及'预订')。在其他专栏中,预订' table的结构如此,LONGTEXT数组存储在' booking_meta'柱:
+------+------+------------+------------------------+
| booking_id | event_id | booking_meta |
+------+------+------------+------------------------+
| 1 | 12 | (example array below) |
| 2 | 12 | |
| 3 | 12 | |
| 4 | 12 | |
| 5 | 13 | |
| 6 | 13 | |
| 7 | 13 | |
+------+------+------------+------------------------+
示例数组:
a:1:{s:12:"registration";a:5:{s:10:"user_email";s:14:"test@email.com";s:9:"user_name";s:9:"Full Name";s:10:"first_name";s:4:"Full";s:9:"last_name";s:4:"Name";s:10:"dbem_phone";s:8:"12345678";}}
基本上,我想拉出' user_name'和' dbem_phone'来自预订' booking_meta'并在接下来的15分钟内将其回显到所有预订列表中。 以下查询中的所有内容都有效,但我不知道如何在已经发生的事情的基础上解析这个数组:
$bookingresult = mysqli_query($con,"SELECT * FROM events, bookings
WHERE event_start_date='$date' AND event_start_time BETWEEN '$currenttime' and '$currenttime15' AND events.event_id = bookings.event_id");
echo "Bookings for events in the next 15 minutes: <br>";
while($row = mysqli_fetch_array($bookingresult)) {
echo $row['booking_id'] . " " . $row['event_name'];
$phonedata = mysqli_fetch_array($row['booking_meta']);
echo $phonedata['phone'];
echo "<br>";
}
答案 0 :(得分:1)
存储在booking_meta
字段中的数据看起来像一个序列化的PHP数组。数组传递给serialize
以生成booking_meta
的值
要将其转回数组,请将字符串传递给unserialize
。
简而言之,正如我在评论中所说:
$phonedata = mysqli_fetch_array($row['booking_meta']);
//should be
$phonedata = unserialize($row['booking_meta']);
echo $phonedata['registration']['dbem_phone'];
尝试var_dump($phonedata);
了解数据的实际结构(它是一个2D数组)。
PS:您使用$row
作为关联数组,这很好。但是,您将该行作为关联以及数字索引数组获取。哪个是mysqli_fethc_array
的默认行为,请考虑切换到mysqli_fetch_assoc