PHP 7.2中未定义的函数odbc_connect()

时间:2018-06-19 13:26:34

标签: php

我遇到错误

  

致命错误:未捕获错误:调用未定义函数odbc_connect()

我已经在php.ini中添加了扩展名,并且phpinfo()确认odbc驱动程序存在(请参见屏幕快照)enter image description here

php脚本只是一个简单的查询

<?php

$num_minutes = 10;
ini_set('max_execution_time', (60*$num_minutes));

$conn = odbc_connect("CData Sage50UK Source","manager","password");

$query = odbc_exec($conn, "SELECT * FROM SalesOrders LIMIT 1");

while($row = odbc_fetch_array($query)){

    $json1[] = array_map('utf8_encode', $row);
}   

echo json_encode($json1);
?>

1 个答案:

答案 0 :(得分:1)

您提供的屏幕截图确实显示了已安装的ODBC驱动程序。但是,有问题的驱动程序不是提供odbc_xxx()功能的驱动程序。而是通过PDO库提供对ODBC的访问。

您有两个选择:

  1. 安装用于访问odbc_xxx()函数所需的PHP ODBC驱动程序扩展。确切的执行方法将因您所使用的平台而异,因此我无法提供确切的说明,但是您将需要管理员访问服务器,因此它可能对您而言不是可行的解决方案。

  2. 更改代码以使用PDO库而不是odbc_xxx()函数。您将需要使用以下代码行连接到数据库:

    $db = new PDO('odbc:Server=dbIpAddr,portNumber;Database=databaseName', 'username', 'password');
    

    ...,然后在整个代码中使用PDO方法调用来访问数据库。以您的示例为例:

    $stmt = $db->query("SELECT * FROM SalesOrders LIMIT 1");
    while ($row = $stmt->fetch())
    {
        $json1[] = array_map('utf8_encode', $row);
    }
    

    如果您已经编写了所有代码,则可能会很痛苦。另一方面,这样做的好处是,如果您愿意的话,您的代码将在数据库引擎之间更易于移植。 (由于SQL不是一种一致的语言,但是这样做仍然会涉及到工作,但是有可能做到)