我遇到错误
致命错误:未捕获错误:调用未定义函数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);
?>
答案 0 :(得分:1)
您提供的屏幕截图确实显示了已安装的ODBC驱动程序。但是,有问题的驱动程序不是提供odbc_xxx()
功能的驱动程序。而是通过PDO库提供对ODBC的访问。
您有两个选择:
安装用于访问odbc_xxx()
函数所需的PHP ODBC驱动程序扩展。确切的执行方法将因您所使用的平台而异,因此我无法提供确切的说明,但是您将需要管理员访问服务器,因此它可能对您而言不是可行的解决方案。
更改代码以使用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不是一种一致的语言,但是这样做仍然会涉及到工作,但是有可能做到)