MySQL 8.0 の SQL クエリ JSON によって返されるデータ型は配列ではなく文字列です
<p>以下に示すように、MySQL 8.0 でテーブルを作成しました。
<pre class="brush:php;toolbar:false;">CREATE TABLE `airline_table` (
`id` int unsigned NOT NULL AUTO_INCREMENT、
`info` json デフォルト NULL、
主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;</pre>
<p>これには JSON タイプのデータが含まれています。次のようにいくつかのデータを挿入しました。</p>
<pre class="brush:php;toolbar:false;">INSERT INTO Airlines_table VALUES ('1','{"data": [{"city": "Houston", "state": 「TX」}、
{"都市": "ロサンゼルス", "州": "CA"}], "航空会社": ["UA", "AA"]}');
<p>php を使用してデータベースにアクセスし、「airline」の値を配列として取得したいと考えています。 </p>
<pre class="brush:php;toolbar:false;"><?php
$mysqli = new mysqli("localhost", "root", "aproot2019", "test");
$sql = "SELECT id, info -> '$.airline' AS 航空会社 FROM airline_table";
$result = $mysqli->query($sql);
$row = $result->fetch_array();
//print_r($row);
$airline = $row['airline'];
echo $airline . "<br>"; // ["UA", "AA"] 、これは配列ではなく文字列ですが、どうすれば配列を取得できますか?
echo is_array($airline) ? 'Array' : 'not an Array' . "<br>"; // 配列ではありません
echo is_string($airline) ? 'String' : 'not a String' . "<br>" ; // 文字列
$mysqli->close();
?></pre>
<p>ただし、出力されるのは配列ではなく文字列です。
これは本当に面倒です。MySQL の JSON は理解するのが難しいです。 </p>