Ik werk al jaren voor een klant en een van de dingen die ik heb gedaan is een koppeling met een MS Access database (.mdb) in de PHP applicatie die ik beheer. Dit heeft jaren prima gedraaid op een Windows server echter gaan we nu over naar een aparte VPS voor de applicatie en blijft de Access database draaien op een aparte Windows 2019 server. De servers zijn middels een VPN aan elkaar verbinden en is er een share gemount op de Linux server. Middels het volgende script wil ik verbinding maken met de database:


try {
	$db=new PDO("odbc:Driver=MDBTools; DBQ=/mnt/<dir>/<file>.mdb;");
	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	$query=$db->query("SELECT * FROM <table>;");

	$return=array();
	if($query) {
		while($result=$query->fetch(PDO::FETCH_ASSOC)) {
			$return[]=$result;
		}
	}else $return['error']=1;
	
	//close
	$query=null;
	$db=null;
	
	print_r($return);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}


Op dit moment krijg ik de volgende fout: Connection failed: SQLSTATE[08001]: Client unable to establish connection: 1 Couldn't parse SQL (SQLExecute[1] at /build/php7.2-pRoOsC/php7.2-7.2.24/ext/pdo_odbc/odbc_stmt.c:260)
Je houdt nu een aparte server aan om een MS Access database in leven te houden, en je legt een tunnel aan om erbij te kunnen?

:/

Tijd om de technologie-stack te vereenvoudigen?

Je hebt het ook over "jaren". Is er in al die tijd nooit een balletje over opgegooid?

Wellicht ook hoog tijd om deze technical debt in te lossen.
De aparte server dient dan weer als RDP toegang naast toegang tot het MDB bestand. Sorry, MDB blijft een ding, heb ik geen controle over, is namelijk van een apart bedrijf en heb er mee te dealen. Het balletje dat nu is opgegooid is juist de splitsing om de web applicatie eindelijk eens op een Linux server te krijgen, ondanks dat het op Windows altijd vlekkeloos heeft gedraaid.

Maar hierover gaat deze topic niet, dus als je een oplossing hebt, graag.
Staat/n de juiste poort/en open (en welke zijn dit precies)? Heeft de machine waarmee je een connectie maakt hier toestemming toe? Als je geen verbinding kan maken zoals de foutmelding doet vermoeden is de Access-machine simpelweg onbereikbaar.

Voordat je de oplossing hebt/formuleert zul je eerst moeten uitzoeken wat er precies misgaat.
Ik kan het bestand "zien" in de share en ook als ik het bestand lokaal haal krijg ik dezelfde melding. Het lijkt me dus geen rechtenkwestie. Krijg verder ook geen fouten dat ODBC niet op de server zou draaien.
Wild guess: wat als je de punt-komma uit je query verwijdert?
YOU DA MAN!! Vreemd genoeg lost dit het probleem op, waarbij de foutmelding lijkt te zeggen dat het bij de connectie ligt.
Dat zou je inderdaad denken, maar er staat ook "couldn't parse SQL", dus ik dacht kan nooit kwaad :p.

Mogelijk verschillen in (hoe) de drivers (onder water werken) dan ofzo in vergelijking met de oude situatie, who knows :).

Reageren