login  Naam:   Wachtwoord: 
Registreer je!
 Forum

MS Access database AND MySQL

Offline dvdm - 07/02/2014 17:47 (laatste wijziging 07/02/2014 17:54)
Avatar van dvdmNieuw lid hoi,

Ik wil een MS Access database, die op een website staat, via een PHP script op regelmatige basis overladen in een MySQL database, op dezelfde webserver.
De vraag is of dit eigenlijk wel kan en indien "ja" kan iemand mij op de juiste weg helpen? De Access database heeft slechts 1 tabel met een 10 tal kolommen. Alvast dank voor jullie support.

11 antwoorden

Gesponsorde links
Offline rredspike1 - 07/02/2014 18:13
Avatar van rredspike1 Lid Lijkt me niet heel erg ingewikkeld... denk dat je dit vast zelf wel kan scripten...tenminste als je php een beetje onder de knie hebt.
Offline dvdm - 07/02/2014 19:30
Avatar van dvdm Nieuw lid Lijkt idd simpel maar dat is het volgens mij niet. Het probleem is dat MS Access een Microsoft platform is en MySQL niet. In ASP is dat idd zeer vlot mogelijk maar ik zoek een oplossing voor PHP.
Offline Thomas - 07/02/2014 19:58 (laatste wijziging 07/02/2014 21:32)
Avatar van Thomas Moderator Dit kan / zou moeten kunnen met ODBC. Zal eens kijken of ik daar nog ergens een voorbeeldje van heb, of er een kan maken. Ook zou je ondertussen wat kunnen Googlen .

EDIT: uitgeprobeerd op een eeuwenoude MS Access database die ik nog had liggen ergens. Dit voorbeeld houdt geen rekening met:
- security (dump-functie escaped geen output)
- speciale/uitgebreide karaktersets, dat moet je zelf maar uitvogelen

  1. <?php
  2. function dump($a) {
  3. echo '<pre>'.print_r($a, true).'</pre>';
  4. }
  5.  
  6. // assumption: no usernames/passwords set for accessing
  7. $source = getcwd().DIRECTORY_SEPARATOR.'db.mdb';
  8. if (($con = odbc_connect('Driver={Microsoft Access Driver (*.mdb)};Dbq='.$source, '', '', SQL_CUR_USE_ODBC)) === false) {
  9. die('connection failed');
  10. }
  11.  
  12. // odbc_prepare will only halt on syntax error, it isn't until execution a query fails,
  13. // for example because you refer to a a nonexistent table...
  14. // odbc_exec both prepares and executes a query (so it's odbc_prepare() and odbc_execute() combined)
  15.  
  16. // for a list of tables use odbc_tables
  17. $tables = array();
  18. $res = odbc_tables($con);
  19. while ($row = odbc_fetch_array($res)) {
  20. if ($row['TABLE_TYPE'] == 'TABLE') {
  21. $tables[] = $row['TABLE_NAME'];
  22. }
  23. }
  24. odbc_free_result($res);
  25. dump($tables);
  26.  
  27. // for a table definition
  28. // @see http://www.php.net/manual/en/function.odbc-columns.php comments
  29. // cannot seem to get odbc_columns to work, or I don't understand how to use
  30. $table = array();
  31. $res = odbc_exec($con, 'SELECT * FROM someTable WHERE 1=2');
  32. $n = odbc_num_fields($res); // field numbering starts at 1
  33. for ($i=1; $i <= $n; $i++) {
  34. $field_name = odbc_field_name($res, $i);
  35. $table[$field_name] = array(
  36. 'type' => odbc_field_type($res, $i),
  37. 'length' => odbc_field_len($res, $i),
  38. );
  39. }
  40. odbc_free_result($res);
  41. dump($table);
  42.  
  43. // fetch some data
  44. $res = odbc_exec($con, 'SELECT * FROM someTable') or die(odbc_error($con));
  45. while ($row = odbc_fetch_array($res)) {
  46. dump($row);
  47. }
  48. odbc_free_result($res);
  49.  
  50. odbc_close($con);
  51. ?>
Offline dvdm - 08/02/2014 20:46 (laatste wijziging 08/02/2014 20:47)
Avatar van dvdm Nieuw lid oeps ...
krijg volgende melding;
Fatal error: Call to undefined function odbc_connect()
ik vermoed dat mijn server deze ODBC driver niet ondersteund.... of heb ik het mis?
kan ik zien in de PHP.ini of deze ODBC driver op staat?
Offline Thomas - 08/02/2014 23:15 (laatste wijziging 08/02/2014 23:45)
Avatar van Thomas Moderator als je phpinfo() in een losstaand PHP script aanroept zou hier een kopje "odbc" tussen moeten zitten, anders is deze functionaliteit waarschijnlijk niet mee-gecompiled in deze PHP versie (oftewel, als je geen kopje "odbc" ziet (met "enabled") dan is deze functionaliteit niet beschikbaar).

Het kan blijkbaar ook via PDO. Je zou eens naar die voorbeelden kunnen kijken, ik zal ook zelf nog een fragmentje in elkaar steken (volgt later).

EDIT #1: als je toegang hebt tot je php.ini, zorg dan dat de volgende extension wordt geladen: extension=php_pdo_odbc.dll (en daarna zul je wss je webserver moeten herstarten; mogelijk is dit alleen voor Windows? hmm)

Je kunt controleren over welke drivers PDO (al) beschikking heeft met behulp van:

  1. <?php
  2. echo '<pre>'.print_r(PDO::getAvailableDrivers, true).'</pre>';
  3. ?>


Heb zojuist de PDO odbc driver aangezet in mijn WAMP, het lijkt erop dat ik een connectie kan maken met mijn Access database uit het stenen tijdperk .

Als je geen volledig beheer hebt over je "internet account" en odbc wordt niet standaard ondersteund zijn je mogelijkheden beperkt denk ik.
Offline dvdm - 09/02/2014 18:59
Avatar van dvdm Nieuw lid ook PDO info opvragen wordt niet toegestaan en evenmin PHP.ini (Fatal error bij runnen bovenstaand script "PDO::getAvailableDrivers"
Bij navraag bij mijn hosting blokkeren ze deze info om veiligheidsredenen.
ik heb dan de vraag gesteld of de PDO setting voor ODBC en MySQL "enabled" staat en daarop krijg ik volgend antwoord;

Configure Command './configure' '--with-apxs2'
'--with-curl=/usr/local/lib' '--with-gd' '--enable-gd-native-ttf'
'--with-ttf' '--with-gettext' '--with-jpeg-dir=/usr/local/lib'
'--with-freetype-dir=/usr/local/lib' '--with-kerberos' '--with-openssl'
'--with-mcrypt' '--with-mhash' '--with-mysql=/usr'
'--with-mysqli=/usr/bin/mysql_config' '--with-pcre-regex=/usr/local'
'--with-pdo-mysql=/usr' '--with-unixODBC=/usr' '--with-pear'
'--with-png-dir=/usr/local/lib' '--with-xsl' '--with-zlib'
'--with-zlib-dir=/usr/local/lib' '--enable-zip' '--with-iconv=/usr/local'
'--enable-bcmath' '--enable-calendar' '--enable-ftp'
'--enable-magic-quotes' '--enable-sockets' '--enable-mbstring'

ik denk dat ze het zelf niet snappen bij mijn hosting bedrijf...
Offline Thomas - 09/02/2014 19:54 (laatste wijziging 09/02/2014 20:18)
Avatar van Thomas Moderator unixODBC is de ODBC-driver die je onder linux gebruikt volgens php.net. Dus als je die (dynamisch) kunt laden zou PDO ODBC moeten ondersteunen.

Ik ben nu (op een unix webaccount) aan het uitzoeken wat de naam is van dat driver-bestand, er van uitgaande dat ik die dynamisch kan laden met dl().

EDIT: dl() werkt mogelijk niet meer vanaf PHP 5.3.0. Gebruik de extension=... bij het opstarten van PHP, zoals door je webhost is aangegeven.

Je zou ook kunnen spieken in je extension directory welke extensies er allemaal beschikbaar zijn, maar gezien de security op jouw site werkt dit mogelijk niet:

  1. <?php
  2. // lees extension dir uit en print bestandsnamen
  3. // mogelijk kun je dit gebruiken om deze libraries dynamisch te laden met dl()
  4. // maar beter is dus om deze mee te nemen bij het opstarten
  5. if (($dh = opendir(ini_get('extension_dir'))) !== false) {
  6. while (($file = readdir($dh)) !== false) {
  7. echo $file.'<br />';
  8. }
  9. closedir($dh);
  10. }
  11. ?>
Offline Wijnand - 11/02/2014 08:48
Avatar van Wijnand Moderator Een PDO script voor als je PDO beschikbaar hebt:

  1. try
  2. {
  3. $pdo = new PDO('odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=database.mdb;Uid=eventueel_gebruikersnaam');
  4. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5. $myPDO = $pdo->prepare($query);
  6. $myPDO->execute();
  7.  
  8. $result = $myPDO->fetchAll();
  9. } catch(PDOException $e)
  10. {
  11. echo $e->getMessage();
  12. }
Offline dvdm - 11/02/2014 14:40
Avatar van dvdm Nieuw lid Hartelijk dank! ik zal in de eerste plaats WAMP installeren en daarop eens alles uittesten. als het hierop lukt ben ik al een heel stuk verder. het ik natuurlijk jammer dat ik van mijn hosting geen informatie krijg over de PHP.ini instelleningen.
Ik hou jullie zeker op de hoogte!!
Offline Thomas - 11/02/2014 14:59
Avatar van Thomas Moderator Ik heb twee vragen voor je:
1. kun je bij je php.ini, en kun je deze inhoudelijk aanpassen?
Dan lijkt het mij een kwestie van het "uncommenten" van de juiste library/extensie en het herstarten van je webserver. Je kunt ook controleren welke libraries/extensies aanwezig zijn met mijn bovenstaande code snippet (of werkt dit niet?). Je zou dus ook kunnen proberen deze dynamisch te laden met dl(), maar dat werkt dus mogelijk niet (meer). Daarnaast zou je kunnen vragen of het tot de mogelijkheden behoort dat er aanvullende libs/extensies geinstalleerd kunnen worden maar gezien het (enigszins cryptische) antwoord wat je terug hebt gekregen moet je (eigenlijk al) in staat zijn om PHP op te starten met ODBC-support door het laden van de goede extensie (unixODBC).

2. welke PHP versie gebruik je en op wat voor platform draait deze?

Ik denk eerlijk gezegd dat je al over alle middelen beschikt om ODBC-support te verwezenlijken, en de reeds gegeven antwoorden zouden je een heel eind op weg moeten helpen zo niet de/een oplossing al bevatten.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2019 Sitemasters.be - Regels - Laadtijd: 0.21s