Hello,
Bon, j'ai finalement réussi à faire fonctionner pdo_odbc. J'ai insisté car une des forces de PDO et de pouvoir changer sans grosse incidence de drivers. Avec dblib, ça marchait presque tout seul. Mais je me devais de trouver une alternative, au cas où dblib ne serait plus maintenu.
Avec odbc, c'était plus compliqué. Je vais tenter de résumer aussi clairement que possible les manip' que j'ai faites, si ça peut être utile à d'autres :
1) Sur le serveur Linux Debian, en plus des paquets usuels pour un serveur Apache/PHP installer php-odbc (qui activera pdo_odbc), unixodbc, tdsodbc (qui fournira freetds)
2) Je me suis ensuite basé sur les instructions dans la doc php
http://php.net/manual/fr/ref.pdo-odbc.php. Voir le #0, mais attention, ne pas le suivre à 100%
a) Créer un fichier
tds.driver dans votre dossier perso et y mettre les infos suivantes :
Code : Tout sélectionner
[FreeTDS]
Description = v0.63 with protocol v8.0
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Attention à vérifier le dossier où se trouve
libtdsodbc.so. Cela varie selon votre distri et/ou architecture.
Enregistrer :
Vous pouvez contrôler que la manip' a fonctionné en visualisant le contenu de
/etc/odbcinst.ini est similaire à votre
tds.driver
b) Ce que l'auteur du post#0 dans la doc citée fait ici me semble optionnel. Je vous le mets quand même.
Créer un fichier
tds.datasource dans votre dossier perso :
Code : Tout sélectionner
[SOURCENAME]
Driver=FreeTDS
Description=Test MS SQL Database with FreeTDS
Trace=No
Server=IP.DE.MON.SERVEUR
Port=1433
TDS Version=8.0
Database=myDatabase
Enregistrer :
A cette étape, vous aurez normalement un fichier
.odbc.ini dans votre dossier perso. L'auteur explique qu'il faut copier ce fichier à la racine de votre site web. Pour ma part, avec ou sans ce fichier, cela n'a rien changé.
3) Tester que votre lien ODBC fonctionne :
Code : Tout sélectionner
isql -v SOURCENAME 'user' 'password'
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
4) A cette étape, si vous faites
$dbh = new PDO("odbc:Driver=FreeTDS;Server=IP.DE.MON.SERVEUR;Port=1433;Database=myDatabase;Uid=user;Pwd=password;");
vous aurez l'erreur
Can't open cursor lib "/etc/libodbccr.so" comme je l'ai indiqué précédemment.
Le détournement se fait par un lien symbolique :
Code : Tout sélectionner
cd /usr/lib/x86_64-linux-gnu
ln -s libodbccr.so.2 libodbccr.so
Mais là, je ne sais pas pourquoi pdo vas chercher son pilote au mauvais endroit. Je ne sais pas si c'est un bug, ou une erreur de configuration de ma part.
Mais voilà, grâce à tout ça, j'ai atteint mon but, qui était d'avoir deux solutions pour se connecter depuis une Linux Debian à un SQL server distant par PDO.
Champagne
