Connecter PHP pour MYSQL via PDO ODBC
Lorsque j'exécute ce code:
print_r(PDO::getAvailableDrivers());
Il dit que j'ai le odbc
pilote disponible.
Array ( [0] => mysql [1] => odbc [2] => sqlite )
Cependant, lorsque j'essaie de l'utiliser comme ceci:
$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", 'mypassword');
Il ne fait rien - pas d'erreurs et il ne fonctionne pas du tout. Il ne sera pas à même d'exécuter du passé qui la ligne!
Comment puis-je me connecter en PHP pour ce MSSQL base de données, via PDO et ODBC?
- Quel système d'exploitation (et version) utilisez-vous?
- Mon PHP est sur CentOS linux (mediatemple) mais le MSSQL base de données à partir de Microsoft Dynamics (Grandes Plaines). Je ne sais pas de quelle version il est. Ai-je besoin de savoir? Ma base de données utilisateur n'a accès en lecture, ils m'ont dit.
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs fichiers de configuration, vous devez avoir configuré.
/etc/odbc.ini
,/etc/odbcinst.ini
et/etc/freetds/freetds.conf
(ces emplacements ne sont valables que pour Ubuntu 12.04 et probablement correcte pour la plupart des *nixes).Vous aurez besoin pour installer
unixodbc
etfreetds
(pas sûr de ce que les noms de package sont sur CentOS). Dans Ubuntu, ce seraitapt-get install unixodbc tdsodbc
.Pour aider à l'installation de ces, regardez cette question Ne pouvez pas Installer FreeTDS via le Gestionnaire de paquets Yum
/etc/odbc.ini (ce fichier peut être vide)
/etc/odbcinst.ini
/etc/freetds/freetds.conf (ou vous pouvez le trouver dans /etc/freetds.conf)
Vous pourriez avoir à changer le
tds version = 7.1
ligne ci-dessus en fonction de votre version de MSSQL.Vous devrez redémarrer apache après que vous avez effectué ces changements.
Dans votre code PHP, vous apprendrez à créer votre objet PDO comme ceci:
Noter que votre nom d'utilisateur peut avoir besoin d'être dans le format:
domain\username
.Aussi, vous savez qu'il travaillait si vous exécutez
phpinfo()
dans votre page et de la recherche pour "freetds", qui présentera une mssql section avec freetds répertorié comme la Version de Bibliothèque.yum install freetds
pour installer FreeTDS. Si vous êtes mal à l'aise, trouver quelqu'un que vous connaissez qui est familier avec Linux pour vous aider.$pdo = new PDO("dblib:host=mssql;dbname=$dbname", $dbuser, $dbpwd);
Accepté la réponse est correcte jusqu'à la véritable appel PHP. Comme quelqu'un l'a fait observer à juste titre il devrait appeler le pilote odbc. Deuxièmement, il n'utilise pas le Nom de Source de Données (DSN) qui a été configuré dans odbc.ini mais est en fait la création d'un groupe ad-hoc de la DSN. Au lieu de cela:
où mssql se réfère à la source de données d'objet dans odbc.ini
Vous pouvez créer un groupe ad-hoc de la DSN comme suit:
où mssql fait maintenant référence à l'objet serveur dans freetds.conf et FreeTDS l'objet de pilote dans odbcinst.ini
(ce doit être vraiment un commentaire mais je n'ai pas de points de rep).
Si vous voulez directement l'installation d'un aop connexion odbc à l'aide FreeTDS pilote pour MS SQL server, sans le spécifier dans le fichier de configuration freetds.conf.
Si vous avez un serveur MSSQL qui ont une instance nommée, vous pouvez supprimer le port puis modifier $serverName dans le format server_ip\nom_instance par exemple: "192.168.1.1\sqlexpress" où sqlexpress est le nom de l'instance.
Remarque pour configurer l'emplacement du pilote dans odbcinst.ini