Я пытаюсь включить расширение pdo_odbc для PHP на моем Mac, работающем под управлением PHP 5.3. Вот что я сделал, чтобы попытаться заставить его работать:
Я установил UnixODBC вместе с brew
$ 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. Я бы очень хотел, чтобы это расширение заработало. Предложения?