Как прочитать тип данных геометрии из базы данных MySQL с помощью PHP - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть таблица в MySQL, в которой хранятся полигоны. Я могу прочитать это обратно в командной строке, используя следующий запрос:

mysql> SELECT polygonid, AsText(thepolygon) FROM polygons;
+-----------+----------------------------------------------------------------------------------------------------------------+ | polygonid | AsText(thepolygon) |
+-----------+----------------------------------------------------------------------------------------------------------------+ | 1 | POLYGON((36.96318 127.002881,37.96318 127.002881,37.96318
128.002881,36.96318 128.002881,36.96318 127.002881)) | +-----------+----------------------------------------------------------------------------------------------------------------+ 1 row in set, 1 warning (0.02 sec)

Когда я пытаюсь прочитать это в PHP, используя тот же запрос, полигонид возвращается правильно, но полигон возвращается как пустой:

$query = "SELECT polygonid, AsText(thepolygon) FROM polygons";
$result = mysqli_query($con, $query);

while ($row = mysqli_fetch_array($result)) {
    var_dump($row['polygonid']);
    var_dump($row['thepolygon']);

    [...]

Результаты в

string(1) "1" NULL

означает, что 'thepolygon' возвращается как NULL, но 'polygonid' возвращается просто отлично.

Если я изменю запрос на

SELECT polygonid, thepolygon FROM polygons

тогда я получаю обратно двоичные данные:

string(1) "1" string(97)
"�t{I{B@�1�3/�_@�t{I�B@�1�3/�_@�t{I�B@��`@�t{I{B@��`@�t{I{B@�1�3/�_@"
string

Это почти как если бы astext () не работал. Что я делаю не так?

Спасибо за любой вклад!

1 Ответ

0 голосов
/ 08 ноября 2018

Похоже, что это может быть просто потому, что вы не указали для AsText() псевдоним, который можно получить из массива PHP.

Если вы напечатаете $row, вы можете увидеть, что в вашем массиве нет ключа thepolygon.

Вы пробовали это?

$query = "SELECT polygonid, AsText(thepolygon) AS thepolygon FROM polygons";

Он работает в командной строке, потому что вы просто распечатываете то, что выбрано в запросе, но в PHP вы пытаетесь распечатать ключи массива - то есть имя выбранных полей. Ваш запрос MySQL не выбирает поле с именем thepolygon, поэтому оно также не существует в массиве.

...