2008-10-21 2 views
1

Я работаю над чем-то, что было создано на ПК, используя php и базу данных доступа ms. Когда я порт приложение к моей MAMP среде, я получаюКак добавить драйвер ODBC в среду 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 и получил аналогичные ошибки.

Кто-нибудь знает, как это исправить?

+0

Несмотря на то, что MS использовал «Microsoft Access Driver», как имя его ODBC драйвер для данных Jet, вы не используете Access вообще, только Jet. Мне жаль, что они не назвали это так, потому что это спасло бы мир путаницы. – 2008-10-24 03:35:08

ответ

3

Вам необходимо добавить драйвер 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); 
     } 
    } 
    } 
Смежные вопросы