如何用php从mysql数据库中读取几何数据类型

ddarikpa  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(430)

我在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返回正确,但polygon返回为空:

$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

意思是“polygon”返回为空,但“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()不起作用一样。我做错什么了?
感谢您的任何意见!

mqkwyuun

mqkwyuun1#

看起来可能只是因为你没有 AsText() 选择可以从php数组中提取的别名。
如果你打印出来 $row 您可能可以看到您的数组没有 thepolygon 钥匙。
你试过这个吗?

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

它在命令行上工作,因为您只是打印出查询中所选的内容,而在php中,您试图打印出数组键,即所选字段的名称。mysql查询没有选择名为 thepolygon ,因此它也不存在于数组中。

相关问题