【发布时间】:2012-04-15 01:55:00
【问题描述】:
我正在尝试在运行 PHP 5.3 的 Mac 上启用 PHP 的 pdo_odbc 扩展,这是我为使其正常工作所做的:
-
我用 brew 安装了 UnixODBC
$ brew install unixodbc -
下载了 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。这次它遵守了。 然后我运行“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 上工作的经验。我真的很想让这个扩展工作。建议?
【问题讨论】:
-
不确定是否有 brew 等价物,但我只是运行了“sudo port install php5-odbc”,它很容易安装。
-
看起来 PDO_ODBC 扩展中有一个错误:bugs.php.net/bug.php?id=52942 我的猜测是一个错误的
malloc()调用来分配已经分配的内存。 -
Kevin,我很确定 php5-odbc 只是旧的非 PDO ODBC 扩展。我正在尝试在 mac 上运行 PDO-ODBC 扩展。