【问题标题】:How to read geometry data type from MySQL database using PHP如何使用 PHP 从 MySQL 数据库中读取几何数据类型
【发布时间】:2018-11-08 14:44:50
【问题描述】:

我在 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 中使用相同的查询读取此内容时,polygonid 正确返回,但多边形返回为空:

$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() 不起作用。 我做错了什么?

非常感谢您的任何意见!

【问题讨论】:

  • 仅供参考,如果您需要在 StackOverflow 上显示格式正确的代码,请添加 four spaces before each line。对每一行使用> 将您的文本格式化为块引用,这不会保留换行符和间距,因此代码难以阅读。
  • 感谢您的评论!下次我会这样做。

标签: php mysql geometry polygon


【解决方案1】:

看起来这可能只是因为您没有为 AsText() 选择一个可以从 PHP 数组中提取的别名。

如果您打印出$row,您可能会看到您的数组没有thepolygon 键。

你试过了吗?

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

它可以在命令行上运行,因为您只是打印出查询中选择的任何内容,但在 PHP 中您尝试打印出数组键 - 即所选字段的名称。您的 MySQL 查询没有选择名为 thepolygon 的字段,因此它也不存在于数组中。

【讨论】:

  • 这样就解决了!非常感谢。非常感谢!
  • 哎呀。对于那个很抱歉。仍然是新的:P
猜你喜欢
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多