【问题标题】:How to select Oracle DB sdo_geometry in php如何在 php 中选择 Oracle DB sdo_geometry
【发布时间】:2014-06-19 05:23:13
【问题描述】:

我的服务器是 nginx,我使用 adodb5 来管理与 Oracle DB 的连接。

此数据库查询返回 SQL 软件(如 SQLDeveloper)中的行,但我不知道如何使其适用于我的情况。

$sql = "SELECT geom_object FROM geom_table";

而这个其他请求有效:

$sql = "SELECT id FROM geom_table";

我的连接代码是正确的,因为我的所有查询都返回了一些数据,除了那些涉及 SDO_GEOMETRY 的数据。

include ("adodb5/adodb-exceptions.inc.php"); 
include ("adodb5/adodb-errorhandler.inc.php"); 
include ("adodb5/adodb.inc.php");

try {   
    $db = NewADOConnection("oci8"); 
    $db->Connect($sid, $user, $password);
    $db->SetFetchMode(ADODB_FETCH_ASSOC);
} catch (exception $e) { 
    var_dump($e); 
    adodb_backtrace($e->gettrace());
    exit;
}

try 
{ 
    $ret = $db->GetArray($sql);
    print count($ret);
} 

catch (exception $e) 
{ 
    print $e->msg; 
    exit;
}

【问题讨论】:

    标签: php sql nginx oracle11g


    【解决方案1】:

    MDSYS.SDO_GEOMTRY 字段不能像在 PHP 中那样被处理。

    首先我需要修改我的 SQL 请求以返回 Well Known Text:

    $sql = "SELECT sdo_util.to_wktgeometry(geom_object) FROM geom_table";
    

    阅读Oracle Documentation on SDO_UTIL,我们可以看到 TO_WKTGEOMETRY 返回一个 CLOB。

    PHP 仍然无法读取数据的值。还有一个更重要的步骤,读取 CLOB。 The Php documentation about OCI-Lob 通知我们有两个函数能够读取 CLOB 并返回字符串:加载和读取。

    $conn = oci_connect($user_prospect, $password_prospect, $sid_prospect);
    
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    
    $stid = oci_parse($conn, $sql);
    oci_execute($stid);
    
    while (($row = oci_fetch_array($stid)) != false) {
        echo $row[column_of_geometry_object]->load();
    }
    
    oci_free_statement($stid);
    oci_close($conn);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 2015-07-16
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      相关资源
      最近更新 更多