У меня есть таблица в 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 () не работает.
Что я делаю неправильно?
Спасибо за любой вклад вообще!
Похоже, это может быть только потому, что вы не дали AsText()
выбор псевдонима, который можно получить из массива PHP.
Если вы распечатываете $row
вы можете увидеть, что ваш массив не имеет thepolygon
ключ.
Вы пробовали это?
$query = "SELECT polygonid, AsText(thepolygon) AS thepolygon FROM polygons";
Он работает в командной строке, потому что вы просто распечатываете все, что выбрано в запросе, но в PHP вы пытаетесь распечатать ключи массива — то есть имя выбранных полей. Ваш запрос MySQL не выбирает поле с именем thepolygon
так что он также не существует в массиве.
Других решений пока нет …