Connessione a mdb con php7

  • Creatore Discussione Creatore Discussione amhal
  • Data di inizio Data di inizio

amhal

Utente Attivo
17 Feb 2011
89
1
8
Buongiorno a tutti,
ho trovato uno script per connettermi a un db mdb, funziona ma con php 5.4, vorrei farlo funzionare con php7.4, ma restituisce questo errore

Fatal error: Uncaught com_exception: <b>Source:</b> Microsoft OLE DB Provider for ODBC Drivers<br/><b>Description:</b> [Microsoft][Driver Manager ODBC] Nome origine dati non trovato e driver predefinito non specificato. in C:\apache\prova\index.php:7 Stack trace: #0 C:\apache\prova\index.php(7): com->open('DRIVER={Microso...') #1 {main} thrown in C:\apache\prova\index.php on line 7

grazie in anticipo.
 
Dopo un mese di agonia e nottate sono riuscito a risolvere, ci sono tante guide ma le soluzioni postate non danno un iter completo da seguire.

Versione php7.4 x64
apache 2.4 x64

1) Controllare nel php.ini che le estensioni di seguito, siano decommentate (quindi senza punto e virgola)
extension=odbc
extension=pdo_odbc

2) Aprire "Amministratore origine dati ODBC (64bit)" e controllare che ci siano solo driver 64bit.
foto1.jpg


Questo punto è il fulcro di tutto il discorso. I driver presenti saranno quelli utilizzati come connettore nella stringa php,
per un db .mde andremo ad utilizzare : MS Access Database. Sono stato costretto a disinstallare i driver a 32bit, altrimenti andava in errore, quindi il driver 64bit non viene caricato se presente un driver 32bit, non so il perchè.
3) installare i driver per access a 64bit, io ho usato: accessdatabaseengine_X64.exe scaricato dal sito ufficiale microsoft.
4) riavviate il pc e quindi server apache
5) creare lo script seguente:

<?php $dbName = $_SERVER["DOCUMENT_ROOT"]. "/prova_mde/testdb/testdb.mdb"; // Definisce percorso e nome del database"; if (!file_exists($dbName)){die("file non trovato.");} else{echo 'db trovato <br />';} try { $db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=$dbName; Uid=; Pwd=;"); } catch(PDOException $error_mess) { echo $error_mess->getMessage(); } $sql = "select * from categorie"; // eseguo la query $result = $db->query($sql); // ciclo tutti i risultati while ($row = $result->fetch()) { print_r($row); } ?>

PUNTI FONDAMENTALI DA RISPETTARE:
1) $_SERVER["DOCUMENT_ROOT"]. (senza e mettendo il percorso scritto per intero è andato in errore)
2) odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb) ( va scritto completo, in diverse guide scrivono fino a *.mdb, ma il
nome del connettore va scritto identico e completo)
3) ovviamente la classe pdo di php deve essere abilitata nel php.ini !!!!

ok questo è tutto, spero di aver risparmiato notti insonni ad altri.
ciao
 

Discussioni simili