【问题标题】:Fetch array from tables within loop从循环内的表中获取数组
【发布时间】:2023-03-07 17:24:01
【问题描述】:

我正在努力使用 PHP 从 MySQL 表中存储为 LONGTEXT 的数组中提取数据。

我正在创建一个从两个单独的表(“事件”和“预订”)中提取的通知脚本。在其他列中,“bookings”表的结构是这样的,在“booking_meta”列中存储了一个 LONGTEXT 数组:

+------+------+------------+------------------------+
| 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";}} 

基本上,我想从“booking_meta”中的数组中提取“user_name”和“dbem_phone”,并在接下来的 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>";
}

【问题讨论】:

标签: php mysql sql arrays


【解决方案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); 了解数据的实际结构(它是一个二维数组)。

PS:您使用$row 作为关联数组,这很好。但是您将行作为关联以及数字索引数组来获取。这是mysqli_fethc_array的默认行为,考虑切换到mysqli_fetch_assoc

【讨论】:

  • 谢谢 Elias - 已经完成了。但是,当我回显 $phonedata['dbem_phone']; 时仍然没有打印任何内容; - 既然数组没有序列化,我还需要对它做些什么吗?感谢您的帮助。
  • @Tom:更新了我的答案...基本上:它是一个多维数组
  • 已解决 - 读取数组错误。需要:echo $meta['registration']['dbem_phone']
猜你喜欢
  • 2015-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多