MSSQL Server Pilote ODBC Natif pour Linux et PHP 5.4
J'ai Apache 2.2.16 et PHP 5.4.3 sur un Linux Debian 6 x64.
Pour installer le Serveur MSSQL du Pilote ODBC Natif pour Linux, j'utilise les instructions suivantes:
http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-pilote odbc-linux/
J'ai configuré mon odbc.le fichier ini de cette façon:
[mydsn]
Driver = SQL Server Native Client 11.0
Database = datbase
Server = xxx.xxx.xxx.xxx,port
et mon odbcinst.ini de cette façon:
[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Threading=1
UsageCount=1
Pour tester, je exécutez la commande suivante:
$ isql -v mydsn dbusername dbpassword
Et j'ai eu du succès:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Puis, utilisez la commande phpize pour installer unixODBC sur PHP 5.4, en utilisant ceci:
(La première commande ln -s ..., est utilisé parce que ./configurer ne pouvez pas trouver les en-têtes de php sur l'emplacement par défaut)
$ sudo ln -s /usr/include/php5 /usr/include/php
$ phpize
$ ./configure --with-pdo-odbc=unixODBC && make && make test
$ sudo make install
Sur mon phpinfo() j'obtiens:
PDO support - enabled
PDO drivers - odbc
PDO Driver for ODBC (unixODBC) - enabled
ODBC Connection Pooling - Enabled, strict matching
Maintenant, il est temps de tout tester sur un script PHP 5.4:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$conn = new PDO('odbc:DSN=mydsn;UID='.$usr.';PWD='.$psw);
$query = 'select * from my_table';
$stmt = $conn->prepare($query);
$stmt->execute();
while ($row = $stmt->fetch()) {
echo "<pre>";
print_r($row);
echo "</pre>";
}
?>
Mais ça ne fonctionne pas... j'ai eu ce message d'erreur:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[01000] SQLDriverConnect: 0
[unixODBC][Driver Manager]Can't open lib '/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0' : file not found'
in /var/www/testemssql.php:17
Stack trace:
#0 /var/www/testemssql.php(17): PDO->__construct('odbc:DSN=mydsn...')
#1 {main} thrown in /var/www/testemssql.php on line 17
Donc ma question est: ce qui est arrivé? Quelle configuration je suis absent?
Comment configurer correctement le Serveur MSSQL du Pilote ODBC Natif sur Linux et PHP 5.4?
Ps.: Lorsque j'essaie d'utiliser le odbc_connect() de PHP indique que la fonction n'existe pas.
désolé, qu'entendez-vous par "générique"? comment puis-je tester?
Lors de la compilation avec "--with-pdo-odbc=unixODBC", il y a aussi une "--with-pdo-odbc=générique,dir,libname,ldflags,cflags" version - aucune idée si ça va marcher car je ne l'ai jamais fait, mais juste jeter quelque chose à vous d'essayer si personne d'autre ne donne aucune pointeurs.
J'ai reçu récemment une version plus récente du pilote fonctionne bien sur Ubuntu 16.04 avec php7, voir ici: stackoverflow.com/a/37312824/55267
OriginalL'auteur vinigarcia87 | 2012-05-23
Vous devez vous connecter pour publier un commentaire.
Je sais que c'est un peu tard, mais depuis que j'ai touché ce thread alors que cogner ma tête contre le exactement le même problème, voici quelques suggestions pour toute personne en cours d'exécution dans le futur 🙂
1) Vérifiez les autorisations sur libsqlncli-11.0..1790.0 assurez-vous que quelle que soit l'utilisateur Apache s'exécute pouvez y accéder (il faut lire et exécuter)
2) Utilisez la commande ldd pour vérifier qu'aucun des dépendances manquantes - basée sur le fait que isql est de travail ci-dessus, je dirais qu'ils sont OK (indice: vous êtes à la recherche pour le "non trouvé"):
ldd /opt/microsoft/sqlncli/lib64/libsqlncli-11.0..1790.0
3) Essayez de lancer votre script php en ligne de commande plutôt que par le biais de Apache. Si ça fonctionne comme ça, allez à l'arrêt 4. Si ça ne marche pas, je vous suggère de courir à travers strace pour voir ce qu'il est en train de faire.
4) C'est le seul qu'il a fait pour moi! Essayez de désactiver SELinux (à savoir configuré pour ne pas l'application /mode permissif) et la frappe de la page dans Apache de nouveau. Je ne suis pas sûr exactement ce que c'était de blocage (n'ai pas eu le temps ni l'envie d'entrer dans les détails, encore), mais dès qu'il a été tout a fonctionné comme un charme. Pour n'importe qui avec l'inclinaison je suis vous pourriez creuser et comprendre comment résoudre ce problème sans désactiver complètement 🙂
Commandes pour désactiver SELinux peut varier en fonction de votre OS, mais pour moi (CentOS) cela a fonctionné:
http://rbgeek.wordpress.com/2012/08/06/how-to-disable-selinux-on-centos-without-rebooting/
Bonne chance!
OriginalL'auteur conclavia
MSSQL Server Pilote ODBC Natif pour Linux a un bug sur elle
Connecter MS SQL Server correctement, utilisez FreeTDS
Voir plus de détails dans : PHP 5.4 sur Linux: Comment faire pour se connecter avec MS SQL Server 2008?
OriginalL'auteur vinigarcia87
La même configuration, sauf pour odbcinst.ini:
Réessayer après la suppression de cette ligne:
Et votre script php fonctionne bien pour moi.
Espère que cela peut vous aider.
OriginalL'auteur Alx Russell
Si vous patch et recompiler php avec le patch attaché à https://bugs.php.net/bug.php?id=61777 il va résoudre le problème.
Également consulter ce blog pour les exemples de la DSN et d'utilisation:
http://strangenut.com/blogs/dacrowlah/archive/2012/04/13/installing-and-using-the-microsoft-sql-server-odbc-driver-for-linux.aspx
OriginalL'auteur KRavEN
Je n'ai jamais eu la chance de l'essayer moi-même, mais j'ai entendu php5-sybase, qui fonctionne bien, qui je sais est disponible pour Debian et Ubuntu dans les référentiels.
OriginalL'auteur Ddorda