如何使用PHP从MySQL数据库读取几何数据类型

时间:2018-11-08 14:44:51

标签: php mysql geometry polygon

我在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 :(得分:1)

可能只是因为您没有为int main( int argc, char **argv ) { // vary this to find optimal size // (must be a multiple of page size) size_t copy_size = 1024UL * 1024UL; // get a page-aligned buffer char *buffer; ::posix_memalign( &buffer, ( size_t ) ( 4UL * 1024UL ), copy_size ); // make sure the entire buffer's virtual-to-physical mappings // are actually done (can actually matter with large buffers and // extremely fast IO systems) ::memset( buffer, 0, copy_size ); fd = ::open( argv[ 1 ], O_RDONLY | O_DIRECT ); for ( ;; ) { ssize_t bytes_read = ::read( fd, buffer, copy_size ); if ( bytes_read <= 0 ) { break; } } return( 0 ); } 选择项提供可以从PHP数组中提取的别名。

如果您打印出AsText(),则可能会发现您的阵列没有$row键。

您尝试过吗?

thepolygon

它在命令行上有效,因为您只是打印出查询中选择的任何内容,但是在PHP中,您试图打印出数组键-即所选字段的名称。您的MySQL查询不会选择名为$query = "SELECT polygonid, AsText(thepolygon) AS thepolygon FROM polygons"; 的字段,因此该数组也不存在。