Skip to content

zoilomora/doctrine-dbal-msaccess

Repository files navigation

Doctrine DBAL for Microsoft Access

An implementation of the doctrine/dbal library to support Microsoft Access databases in Microsoft OS.

There are some functionalities that are not supported by Microsoft Access in a PDO-based connection. For these functionalities the implementation uses a direct connection through ODBC.

OS Requirements

  • Microsoft Access Database Engine Redistributable (2010 or 2016).
  • Register a DSN in ODBC Data Source Administrator odbcad32.exe.

Installation

  1. Install via composer

    composer require zoilomora/doctrine-dbal-msaccess

Register a DSN

We don't need to reinvent the wheel, on the internet there are hundreds of tutorials on how to set up a DSN for Microsoft Access. I leave you a video that I think explains it perfectly.

Once the DSN is configured we will have to configure the connection in the following way:

$connection = \Doctrine\DBAL\DriverManager::getConnection(
    [
        'driverClass' => \ZoiloMora\Doctrine\DBAL\Driver\MicrosoftAccess\Driver::class,
        'driverOptions' => [
            'dsn' => 'name of the created dsn',
        ],
    ]
);

Discovered problems

Character encoding problems

The default character encoding in Access databases is Windows-1252. If you want to convert the data to UTF-8, a simple solution would be:

$field = \mb_convert_encoding($field, 'UTF-8', 'Windows-1252');

If you want all the data to be encoded automatically to UTF-8 (with the performance reduction that it may imply) configure the driver as follows:

$connection = \Doctrine\DBAL\DriverManager::getConnection(
    [
        'driverClass' => \ZoiloMora\Doctrine\DBAL\Driver\MicrosoftAccess\Driver::class,
        'driverOptions' => [
            'dsn' => 'name of the created dsn',
            'charset' => 'UTF-8',
        ],
    ]
);

License

Licensed under the MIT license

Read LICENSE for more information