You may receive this error when testing a PDO-ODBC connection:
"The specified DSN contains an architecture mismatch between the Driver and Application"
My environment was Windows 7 (64 bit), MySQL ODBC drivers (64 bit), Apache 2.2.17 (32 bit), PHP 5.3.5 (32 bit).
If you are like me, you were testing the PDO-ODBC connection because the native database drivers were not visible to PHP. Furthermore, the MySQL 32 bit drivers did not work in my environment.
Solution: Your environment has to be 64 bit all the way through.
Install 64 bit versions of Apache and PHP. They are not available from official sources. However, kind people have compiled some and made them available for download.
As a bonus, the native database drivers suddenly showed up enabled.
Kurulum
-
PDO ve PDO_SQLITE sürücüsü PHP 5.1.0'dan itibaren öntanımlı olarak etkindir. Başka bir veritabanının PDO sürücüsünü etkinleştirmek isterseniz bunun nasıl yapılacağını veritabanlarına özgü PDO sürücüleri sayfasından öğrenebilirsiniz. Yalnız dikkat: PDO eklentisini bir paylaşımlı eklenti olarak (bu önerilmez) derliyorsanız tüm PDO sürücülerinin PDO'nun kendisinden sonra yüklenmesine dikkat etmelisiniz.
-
PDO eklentisini bir paylaşımlı eklenti olarak kuruyorsanız, PHP çalıştığı zaman PDO eklentisinin özdevinimli olarak yüklenmesi için php.ini dosyasını buna göre düzenlemeniz gerekir. Ayrıca kullanacağınız veritabanına özgü sürücülerinde dosyada etkin kılınması gerekir. Bunu yaparken bunların pdo.so satırından sonra listelenmesine dikkat etmelisiniz. Çünkü, PDO eklentisinin veritabanlarına özgü eklentiler yüklenmeden önce ilklendirilmesi gerekir. PDO'yu ve veritabanlarına özgü eklentileri duruk olarak derliyorsanız php.ini adımını atlayabilirsiniz.
extension=pdo.so
-
PDO ve belli başlı sürücülerin tamamı, birer paylaşımlı eklenti olarak PHP ile birlikte gelir ve php.ini dosyasında etkin kılınmaları gerekir:
extension=php_pdo.dll
-
Bu satırın ardına veritabanlarına özgü eklentilerin DLL dosyalarını aşağıdaki gibi ekleyebilir veya dl() ile çalışma anında da yükleyebilirsiniz.
extension=php_pdo.dll extension=php_pdo_firebird.dll extension=php_pdo_informix.dll extension=php_pdo_mssql.dll extension=php_pdo_mysql.dll extension=php_pdo_oci.dll extension=php_pdo_oci8.dll extension=php_pdo_odbc.dll extension=php_pdo_pgsql.dll extension=php_pdo_sqlite.dll
Bu DLL'lerin hepsinin extension_dir yönergesinde belirtilen dizinde bulunması gerektiğini unutmayın.
This page states
"You may need to enable the PDO driver for your database of choice; consult the documentation for [database-specific PDO drivers] to find out more about that."
With the term "database-specific PDO drivers" being a link to this information. However you will no find this information on that or any of the pages that it in turn links to.
The appropriate config options seems to be only available by running ./config --help from the source directory after running autoconf.
Here is the related output from running that command:
=====================
--with-pdo-dblib[=DIR] PDO: DBLIB-DB support. DIR is the FreeTDS home directory
--with-pdo-firebird[=DIR] PDO: Firebird support. DIR is the Firebird base
install directory [/opt/firebird]
--with-pdo-mysql[=DIR] PDO: MySQL support. DIR is the MySQL base directoy
If mysqlnd is passed as DIR, the MySQL native
native driver will be used [/usr/local]
--with-zlib-dir[=DIR] PDO_MySQL: Set the path to libz install prefix
--with-pdo-oci[=DIR] PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME.
Use --with-pdo-oci=instantclient,prefix,version
for an Oracle Instant Client SDK.
For Linux with 10.2.0.3 RPMs (for example) use:
--with-pdo-oci=instantclient,/usr,10.2.0.3
--with-pdo-odbc=flavour,dir
PDO: Support for 'flavour' ODBC driver.
include and lib dirs are looked for under 'dir'.
'flavour' can be one of: ibm-db2, iODBC, unixODBC, generic
If ',dir' part is omitted, default for the flavour
you have selected will used. e.g.:
--with-pdo-odbc=unixODBC
will check for unixODBC under /usr/local. You may attempt
to use an otherwise unsupported driver using the "generic"
flavour. The syntax for generic ODBC support is:
--with-pdo-odbc=generic,dir,libname,ldflags,cflags
When build as shared the extension filename is always pdo_odbc.so
--with-pdo-pgsql[=DIR] PDO: PostgreSQL support. DIR is the PostgreSQL base
install directory or the path to pg_config
--without-pdo-sqlite[=DIR]
PDO: sqlite 3 support. DIR is the sqlite base
install directory [BUNDLED]
=====================
So if you wish for instance to install the PostgreSQL PDO driver, then you should add the --with-pdo-pgsql config option before compiling PHP. I may have made mistakes in my explination, however it appears to work and was my best guess given the absence of the mentioned documentation.
To add from windows, simply use add/remove programs to change the PHP installation and select the PDO features required.
