mysql JSON_EXTRACT в PHP возвращает «Массив» вместо значения индексированного элемента - PullRequest
1 голос
/ 26 мая 2020

Очень базовая c вещь, вероятно, мне не хватает, но я не понимаю. У меня есть таблица с именем mus_translated_languages ​​в моей базе данных, в которой у меня есть столбец типа данных json (шесть записей), значение которого всегда находится в структуре:

["GERMAN","ENGLISH","FRENCH"]

Когда Я использую следующий код:

$sql = 'SELECT labels->"$[1]" FROM mus_translated_languages';
$result = mysqli_query( $conn, $sql );
if ( mysqli_num_rows( $result ) > 0 ) {
  while ( $row = mysqli_fetch_assoc( $result ) ) {
    echo $row;
  }
}

Вместо шести соответствующих языков я получаю следующий результат:

ArrayArrayArrayArrayArrayArray

Итак, это похоже на мой код не может прочитать выходное значение, а только его тип данных. Что мне не хватает ??

UPDATE

Я использовал var_dump($row) вместо echo $row в приведенном выше коде, чтобы увидеть, что у нас есть, и сервер вернул:

array(1) { ["labels->"$[1]""]=> string(9) ""Deutsch"" } array(1) { ["labels->"$[1]""]=> string(10) ""Englisch"" }

и так далее, и так далее, в-четвертых, для 6 массивов / записей. Затем я использовал:

foreach ($row as $key => $value) {
      echo $value;
    }

вместо echo $row в приведенном выше коде и получил то, что хотел. Однако я чувствую, что это не так, как должно быть; PHP извлекает отдельные элементы массива как подмассивы с одним индексом, вместо того, чтобы извлекать их как значения. Что мне не хватает?

1 Ответ

0 голосов
/ 27 мая 2020

Хорошо, поэтому, когда я использовал псевдоним для имени выходного столбца результата моего запроса и выделил строку, полученную в результате запроса, используя ->> вместо ->, это сработало, например:

$sql = 'SELECT labels->>"$[2]" AS label FROM mus_translated_languages';
$result = mysqli_query( $conn, $sql );
if ( mysqli_num_rows( $result ) > 0 ) {
  while ( $row = mysqli_fetch_assoc( $result ) ) {
    echo $row['label'];
  }
}

PS: Изначально я планировал запрашивать элементы массива, используя переменные индексы массива. Благодаря этому сообщению https://medium.com/aubergine-solutions/working-with-mysql-json-data-type-with-prepared-statements-using-it-in-go-and-resolving-the-15ef14974c48 я смог выяснить, как это сделать, поэтому я подумал, что этот пост может также помочь другим с аналогичными проблемами / идеями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...