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

PHP 7.2中未定义的函数odbc_connect(),php,Php,我发现了错误 致命错误:未捕获错误:调用未定义的函数odbc_connect() 我在php.ini中添加了扩展,phpinfo()正在确认odbc驱动程序存在(请参见屏幕截图) php脚本只是一个简单的查询 <?php $num_minutes = 10; ini_set('max_execution_time', (60*$num_minutes)); $conn = odbc_connect("CData Sage50UK Source","manager","password"

我发现了错误

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

我在php.ini中添加了扩展,phpinfo()正在确认odbc驱动程序存在(请参见屏幕截图)

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);
?>

您给出的屏幕截图确实显示了已安装的ODBC驱动程序。但是,所讨论的驱动程序不是提供
odbc\u xxx()
函数的驱动程序。相反,它通过PDO库提供对ODBC的访问

您有两个选择:

  • 安装所需的PHP ODBC驱动程序扩展,以便访问
    ODBC\u xxx()
    函数。具体的操作方法会因您的平台而异,因此我无法给出确切的说明,但您需要管理员访问服务器,因此它可能是您的可行解决方案,也可能不是

  • 将代码更改为使用PDO库,而不是使用
    odbc\u xxx()
    函数。您需要使用以下代码行连接到数据库:

    $db = new PDO('odbc:Server=dbIpAddr,portNumber;Database=databaseName', 'username', 'password');
    
    $stmt = $db->query("SELECT * FROM SalesOrders LIMIT 1");
    while ($row = $stmt->fetch())
    {
        $json1[] = array_map('utf8_encode', $row);
    }
    
    。。。然后在整个代码中使用PDO方法调用来访问数据库。根据您的示例,它将是这样的:

    $db = new PDO('odbc:Server=dbIpAddr,portNumber;Database=databaseName', 'username', 'password');
    
    $stmt = $db->query("SELECT * FROM SalesOrders LIMIT 1");
    while ($row = $stmt->fetch())
    {
        $json1[] = array_map('utf8_encode', $row);
    }
    
    如果您已经编写了所有代码,那么这可能是一个难题。另一方面,这样做的好处是,如果您希望这样做,您的代码将在数据库引擎之间更易于移植。(由于SQL不是一种一致的语言,因此这样做仍然需要做一些工作,但这是可能的)


  • 这行吗?PDO与odbc_connect不同。尝试改用PDO。谢谢您的详细回答。我使用我购买的数据源连接到Sage50,所以我认为odbc是我必须坚持的。目前我正在将Xampp与mysql+phpmyadmin一起使用,在哪里可以添加ODBC驱动程序扩展?我实际上只需要将extension=php_ODBC.dll添加到php.ini中