2016-04-23 1 views
0

J'ai cherché des réponses liées à ma question mais je n'ai pas trouvé ce que je cherchais.CentOS 6.7 et Windows Connexion MSSQL - FreeTDS et PHP

J'ai un serveur avec Linux CentOS 6.7. Je dois vous connecter à MS SQL Server 2005 sur Windows Small Business Server 2003. Dans CentOS j'ai installé FreeTDS et je réussi à se connecter à SQL Server du terminal en utilisant cette commande:

# TDSVER=7.0 tsql -H ServerIPAdress -p 1433 -U username -P password 

Pour autant que je sais que ce by-pass de commande paramètres dans freetds.conf. Maintenant, je dois me connecter à partir du script PHP. J'utilise l'extension PDO et j'ai essayé cette chaîne DSN:

$db = new PDO("dblib:version=7.0;host=ServerIPAdress;dbname=Database;","username","password"); 

Cela me conduit à la première erreur:

Could not find driver

Ok, je comprends que - mon installation PHP 5.3.3 ne pas pilote PDO installé dblib. Ma question: Comment installer le pilote pdo_dblib dans CentOS? De nombreux tutoriels et réponses suggèrent d'installer à travers cette commande:

yum install php5-sybase 

Mais ce paquet n'existe pas:

No package php-sybase available.

Si je vérifie la configuration de tsql avec commande

tsql -C 

Je reçois ces sortie:

     Version: freetds v0.95 
     freetds.conf directory: /usr/local/etc 
MS db-lib source compatibility: no 
    Sybase binary compatibility: no 
       Thread safety: yes 
       iconv library: yes 
        TDS version: 5.0 
         iODBC: no 
         unixodbc: yes 

Comme je comprends que je dois configurer FreeTDS:

./configure --enable-msdblib --with-pdo-dblib=/usr/local 

Mais comment puis-je configurer FreeTDS après instalation? J'ai essayé de supprimer la version actuelle, mais je ne trouve pas le moyen de le faire. J'ai aussi essayé d'installer une autre version mais la configuration ne change pas.

Tous les conseils sont appréciés.

+0

Pour vous connecter depuis PHP, vous avez besoin de FreeTDS et d'unixODBC. PHP parle à unixODBC, et FreeTDS vous permet de vous connecter entre la couche unixODBC et SQL Server lui-même. Avez-vous testé avec 'isql' pour voir si la connexion fonctionne aussi avec unixODBC? Les erreurs ici sont également utiles, vous devrez activer la connexion là où vous le pouvez. – FlipperPA

+0

Salut, merci de répondre. Oui, j'ai testé avec 'isql' et je peux voir l'invite SQL, pour que cela fonctionne comme il se doit. J'ai juste besoin de trouver comment établir une connexion à SQL Server à partir de PHP avec PDO. – ManOfHonor

+0

Veuillez partager vos fichiers freetds.conf, odbcinst.ini et odbc.ini. Exécutez odbcinst -j à partir de votre terminal pour obtenir les fichiers de configuration. – chapskev

Répondre

0

Quand je lance la commande # odbcinst -j je peux voir cette sortie:

unixODBC 2.3.0 
DRIVERS ...........: /usr/local/etc/odbcinst.ini 
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini 
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources 
USER DATA SOURCES..: /root/.odbc.ini 
SQLULEN Size.......: 8 
SQLSETPOSIROW Size.: 8 

Contenu de mon freetds.conf:

# $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $ 
# 
# This file is installed by FreeTDS if no file by the same 
# name is found in the installation directory. 
# 
# For information about the layout of this file and its settings, 
# see the freetds.conf manpage "man freetds.conf". 

# Global settings are overridden by those in a database 
# server specific section 
[global] 
    # TDS protocol version 
    tds version = 7.0 

    # Whether to write a TDSDUMP file for diagnostic purposes 
    # (setting this to /tmp is insecure on a multi-user system) 
; dump file = /tmp/freetds.log 
; debug flags = 0xffff 

    # Command and connection timeouts 
; timeout = 10 
; connect timeout = 10 

    # If you get out-of-memory errors, it may mean that your client 
    # is trying to allocate a huge buffer for a TEXT field. 
    # Try setting 'text size' to a more reasonable limit 
    text size = 64512 

# A typical Sybase server 
[egServer50] 
    host = symachine.domain.com 
    port = 5000 
    tds version = 7.0 

# A typical Microsoft server 
[MSServer] 
    host = 192.168.1.55 
    port = 1433 
    tds version = 7.0 

odbcinst.ini:

[FreeTDS] 
Description = FreeTDS v7.0 
Driver = /usr/local/lib/libtdsodbc.so 
UsageCount = 1 

odbc.ini:

[MSSQL] 
Driver = FreeTDS 
Description = MSSQL Server Connection 
TDS_Version = 7.0 
Trace = No 
Server = MSServer 
Port = 1433 
Database = MyDatabase 
Username = DOMAIN\MyUsername 
Password = MyPassword 

Je peux faire la connexion avec isql commande lorsque je spécifie le nom d'utilisateur et mot de passe:

# isql -v MSSQL "DOMAIN\MyUsername" MyPassword 

Mais si je laisse de côté le nom d'utilisateur et mot de passe isql générer une erreur:

[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source 
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed 

Je soupçonne que mon nom d'utilisateur pose problème parce que je dois utiliser le nom DOMAIN suivi d'une barre oblique inverse avant le nom d'utilisateur lorsque je me connecte à SQ L Server 2005.

MISE À JOUR: J'ai réussi à établir une connexion en PHP et maintenant je peux exécuter des requêtes. J'ai ajouté cette ligne au-dessus de mon script: putenv("FREETDSCONF=/usr/local/etc/freetds.conf") Pourquoi est-ce nécessaire?