Como adiciono um driver ODBC a um ambiente MAMP?
Pergunta
Estou trabalhando em algo que foi criado em uma configuração de PC usando PHP e um banco de dados de acesso ao MS. Quando eu porto o aplicativo para o meu ambiente MAMP, eu entendo
Fatal error: Call to undefined function odbc_connect() in /path/to/index.php on line 37
A linha 37 se parece com o seguinte:
return odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=myfile.mdb",
"ADODB.Connection", "", "SQL_CUR_USE_ODBC");
Parece que o ODBC não é compilado na versão MAMP do PHP (5). Eu também tentei usar PDO e obtive erros semelhantes.
Alguém sabe como consertar isso?
Solução
Você precisará adicionar um driver ODBC como ODBC real Para sua máquina, é se a sua versão do PHP tiver alguma funcionalidade ODBC em que ela deve ter, mas se não precisará instalar uma versão diferente com o suporte apropriado. Eu tive boa sorte em usar Macports Para instalar o PHP. Mas observe que ainda existem algumas funções que você pode esperar que precise escrever invólucros para essas funções como assim:
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);
}
}
}