php - 在 Mac OSX 上启用 PHP pdo_odbc 扩展

标签 php macos pdo odbc

我正在尝试在运行 PHP 5.3 的 Mac 上启用 PHP 的 pdo_odbc 扩展这是我为使其正常工作所做的工作:

  1. 我用 brew 安装了 UnixODBC

    $ brew install unixodbc
    
  2. 下载了 PHP 5.3.8 的源代码。在终端中,我导航到 pdo_odbc 文件夹。然后进行了以下操作。

    $ phpize
    $ ./configure --with-pdo-odbc=unixODBC
    $ make
    

    出现错误。

    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c:43: error: ‘ZEND_MOD_END’ undeclared here (not in a function)
    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c: In function ‘zm_startup_pdo_odbc’:
    /Users/todd/Downloads/php-5.3.8/ext/pdo_odbc/pdo_odbc.c:135: warning: cast to pointer from integer of different size
    

    根据一些博客,我将 ZEND_MOD_END 替换为 {NULL,NUll, NULL} 并再次运行 make。这次它遵守了。

  3. 然后我运行“sudo make install” 并将扩展安装在正确的位置。我修改了 php.ini 以启用它。它显示在 phpInfo() 中

到目前为止一切顺利。但是当我开始运行简单测试时,每次尝试都会出错

php(20048,0x7fff796f1960) malloc: *** mmap(size=2977160837258543104) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
terminate called throwing an exceptionAbort trap: 6

这是在我尝试执行这段代码时抛出的:

<?php

   $dsn = 'odbc:Driver={FileMaker ODBC};Server=localhost;Database=CalDAV;';
   $pdo = new PDO($dsn, "odbc", "odbc");

   $sql = "SELECT * From Users Where id = 2";
   $r = $pdo->query($sql);
   print_r($r->fetch(PDO::FETCH_ASSOC));

   $sql = "SELECT * From Users Where id = ?";
   $stmt = $pdo->prepare($sql);
   $stmt->execute(array(2));
   print_r($stmt->fetch(PDO::FETCH_ASSOC));

?>

这一行导致了异常。

$stmt->execute(array(2));

有没有人有让 pdo_odbc 在 Mac 上工作的经验。我真的很想让这个扩展工作。建议?

最佳答案

也许值得注意的是,Apple 选择 iODBC(而不是 UnixODBC)用于 Mac OS X,并将其与 Jaguar (10.2) 捆绑在一起。你应该得到 latest update from the iodbc.org site ,因为苹果从来没有跟上官方的项目补丁。我建议同时安装框架等,并将单独的补丁应用于 Apple 捆绑的 header 和动态库。

过去与 UnixODBC 相关的 malloc 问题已通过转移到 iODBC 得到解决。我不知道您会遇到这种情况,但这似乎是一项很小的投资。

(ObDisclaimer:我为 OpenLink Software 工作;我们维护和支持 iODBC 项目。我个人从你选择这个选项中没有得到任何好处。)

关于php - 在 Mac OSX 上启用 PHP pdo_odbc 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9958920/

相关文章:

php - 是否可以在自定义模块内显示magento产品列表 block

php - 从 MySQL 数据库的行中获取另一个值

macos - Cocoa 绑定(bind) - 收到 "deallocated while key value observers were still registered"警告

php - 为什么 PDO debugDumpParams 截断查询

php - 使用逗号分隔字符串的搜索列

php - MYSQL 多个like搜索位置

php - 检查 `INSERT SELECT`是否实际插入行

objective-c - 我如何获得 Mac OSX 上的窗口标题列表?

macos - Macports 安装错误

php - PDO 工厂模式