Как добавить драйвер ODBC в среду MAMP?
Вопрос
Я работаю над тем, что было построено на ПК с использованием php и базы данных ms access. Когда я портирую приложение в свою среду MAMP, я получаю
Fatal error: Call to undefined function odbc_connect() in /path/to/index.php on line 37
строка 37 выглядит следующим образом:
return odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=myfile.mdb",
"ADODB.Connection", "", "SQL_CUR_USE_ODBC");
Похоже, что odbc не скомпилирован в версию MAMP PHP (5). Я также попытался использовать PDO и получил похожие ошибки.
Кто-нибудь знает, как это исправить?
Решение
Вам потребуется добавить драйвер ODBC, например Actual ODBC , к вашей машине, то есть, если ваша версия PHP имеет все функциональные возможности ODBC, что и должно быть, но если нет, вам нужно будет установить другую версию с соответствующей поддержкой. Мне повезло с использованием MacPorts для установки PHP. Но обратите внимание, что все еще отсутствуют некоторые функции, которые, возможно, ожидают, что вам придется писать обертки для этих функций, например так:
if(!function_exists("odbc_fetch_array"))
{
function odbc_fetch_array($aResult,$anAssoc=false)
{
# Out of rows? Pass back false!
if(!odbc_fetch_row($aResult)) return false;
$theRow = array();
# Build up array
$theNumFields = odbc_num_fields($aResult);
$theLimit = $theNumFields+1;
for($i=1; $i<$theLimit; $i++)
{
# WARNING: Starts our index at 0, unlike standard ODBC which starts at 1
$theRow[odbc_field_name($aResult, $i)] = odbc_result($aResult, $i);
if(!$anAssoc) $theRow[$i-1] = $theRow[odbc_field_name($aResult, $i)];
}
return $theRow;
}
}
if(!function_exists("odbc_fetch_assoc"))
{
function odbc_fetch_assoc($aResult)
{
if (DIRECTORY_SEPARATOR == '/') // call local function on MACs
{
return odbc_fetch_array($aResult,true);
}
else // call built in function on Windows
{
return odbc_fetch_array($aResult);
}
}
}