Question

Je travaille sur quelque chose qui a été construit sur une configuration PC en utilisant php et une base de données d'accès ms. Lorsque je porte l'application dans mon environnement MAMP, je reçois

Fatal error: Call to undefined function odbc_connect() in /path/to/index.php on line 37

la ligne 37 ressemble à ceci:

return odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=myfile.mdb",
"ADODB.Connection", "", "SQL_CUR_USE_ODBC");

Il semble que odbc ne soit pas compilé dans la version MAMP de PHP (5). J'ai aussi essayé d'utiliser PDO et j'ai eu des erreurs similaires.

Quelqu'un sait comment résoudre ce problème?

Était-ce utile?

La solution

Vous devez ajouter un pilote ODBC tel que ODBC actuel sur votre ordinateur, à condition que votre version de PHP avait une fonctionnalité ODBC conforme, ce qui devrait être le cas, mais sinon, vous devrez installer une version différente avec le support approprié. J'ai eu de la chance d'utiliser MacPorts pour installer PHP. Mais notez qu'il manque encore certaines fonctions et que vous devrez peut-être écrire des enveloppes pour ces fonctions, comme ceci:

  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);
        }
    }
  }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top