AOP Erreur “Adaptive Server n'est pas disponible” lors de la connexion à la Base de données MS SQL
Je suis en train d'essayer de se connecter à une base de données SQL server qui s'exécute sur un serveur windows. Je suis en cours d'exécution de ce code PHP sur un serveur linux (centos 7).
Je suis en utilisant le suivant aop chaîne de connexion pour se connecter à la base de données.
$db = new PDO ("dblib:192.168.2.1;dbname=TestDB","username",'pass');
Lorsque j'exécute le code, j'obtiens l'exception suivante. 'PDOException' with message 'SQLSTATE[HY000] Impossible de se connecter: Adaptive Server n'est pas disponible ou n'existe pas (la gravité 9)'
J'ai essayé de tester la connexion à l'aide tsql et je suis en mesure de se connecter à la base de données sans erreur. Le code suivant m'a donné une liste de toutes les tables dans TestDB. Il ne serait pas travailler si je didng type d'utilisation TestDB premier.
tsql -S 192.168.2.1 -U username -P 'pass' -L TestDB
use TestDB
GO
select * FROM sys.Tables
GO
Mon freetds.fichier conf contient les éléments suivants
[Server1]
host = 192.168.2.1
port = 1433
tds version = 8.0
Je ne peux pas comprendre comment je suis en mesure de vous connecter à l'aide tsql, mais ne peut pas faire la même chose lors de la connexion avec php.
La dblib pilote est définitivement installé.
print_r(PDO::getAvailableDrivers());
Array ( [0] => dblib [1] => mysql [2] => sqlite )
Réponse
Trouvé la cause du problème. S'est avéré être SELinux. Les commandes suivantes résolu le problème.
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_connect_db 1
La façon dont vous instanciez votre objet PDO est autant que je sache le mal. Voir la doc. Ce dblib? Quel est l'hôte? ... Edit: Bon, dblib des liens vers MSServer, mais alors le "host=" préfixe avant que l'adresse IP est manquant.
Ce dblib est? Le connecteur pour SQL Server. 😀 Voir PHP docs. php.net/manual/de/ref.pdo-dblib.php
oui le port est correct. Je peux me connecter à la DB à l'aide de tsql donc je pense que tout est ok. Il ressemble, il peut être spécifiques à php. dblib est le pilote utilisé. mysql ne fonctionne pas avec sql server.
Il semble que cette question a été posée avant. Voir si l'une de ces réponses aider: stackoverflow.com/questions/8511369/...
OriginalL'auteur Dan Hastings | 2015-07-01
Vous devez vous connecter pour publier un commentaire.
Vous avez le nom de source de données, vous devriez faire usage de celui-ci:
Vous êtes sous linux, droit? Je recommande de donner odbc un coup de feu.
sont en mesure d'exécuter
tsql -S Server1 -U username
Il a essayé et il dit "Il y a un problème de connexion au serveur". Donc, quelque chose est en place avec l'info dans le freetds.fichier conf im deviner? Dois-je définir ce ailleurs?
exécuter
tsql -C
et coller la sortieJ'ai trouvé une faute de frappe. Plutôt que de "port" j'avais "post". J'ai changé et redémarré apache. Ce permettez-moi de vous connecter à l'aide de server1. Encore hasnt il fixe avec php si
OriginalL'auteur meda
Lors de la connexion à l'aide de PDO, si vous laissez de côté le
host=
il utilise les sockets de domaine Unix qui pourrait être la cause de votre problème. Mettre dans lehost=
va se connecter à la base de données via TCP/IP.Donc, essayez de changer votre ligne de code:
Ou avec le port aswell:
OriginalL'auteur Just Lucky Really
Trois choses à vérifier pour vous.
Première essayez de votre connexion à l'aide de votre port défini.
Au lieu de:
$db = new PDO ("dblib:192.168.2.1;dbname=TestDB","username",'pass');
essayez d'utiliser ceci:
$db = new PDO("dblib:host=192.168.2.1:1433;dbname=TestDB","username",'pass');
Deuxième, vous devez être sûr que si votre Serveur SQL server est configuré pour s'entendre sur le port 1433. Vous pouvez le vérifier à l'aide du Gestionnaire de Configuration SQL Server.
La troisième (si vous l'exécutez sur windows) chose que vous pouvez enregistrer est une chose que je trouve dans le PHP docs. L'intérieur d'un commentaire, un autre a mentionné la même erreur. Voici la réponse qui semble fonctionner:
Un autre problème pourrait être SELinux si elle est activée. J'ai eu quelques erreurs qui sont quelque chose de familier avec cela sur mon Ruby on Rails d'installation. Vous pouvez faire un essai en désactivant SELinux et essayez à nouveau.
Avez-vous essayé en utilisant l'adresse ip et le port aussi, comme mentionné dans ma réponse?
J'ai ajouté une troisième option.
im l'exécution de ce sur un serveur linux, donc je ne suis pas sûr que cela s'applique depuis des dll windows chose
Ah ok, je pensais que vous l'exécuter sur une machine windows. 🙂
OriginalL'auteur Ionic
J'ai vu cette question même .J'ai résolu très simplement.
Ouvrez votre MSSQLsrver port 1433
et puis vous pouvez vous connecter db succès.
OriginalL'auteur Baren