J'essaie d'utiliser PHP pour vous connecter à une source de données ODBC à l'aide de l'authentification Windows. Je peux très bien me connecter au serveur dans SQL Server afin que je sache qu'il fonctionne. Quand j'essaye de lancer la commande
$link = odbc_connect("my_odbc","","");
Je reçois l'erreur:
"Avertissement: odbc_connect (): erreur SQL:
[Microsoft] [Pilote ODBC 11 pour SQL Server] [SQL Server]
Échec de la connexion de l'utilisateur ''. Etat SQL 28000 dans SQLConnect dans C:\Users ... "
J'ai essayé:
$link = odbc_connect("Driver={ODBC Driver 11 for SQL Server};
Server='my_odbc';Integrated Security=SSPI","","");
Ce qui a renvoyé le message:
Avertissement: odbc_connect (): erreur SQL:
[Microsoft] [Pilote ODBC 11 pour SQL Server]
Fournisseur de canaux nommés: Impossible d'ouvrir une connexion à SQL Server [53]. , État SQL 08001 dans SQLConnect dans C:\Users ... "
Pas sûr de ce que je fais mal.
my_odbc
est un serveur SQL Server (2008) situé sur une autre machine. Je n'ai pas de privilèges d'administrateur sur cette base de données, je ne peux donc rien y changer (par exemple, activer l'authentification SQL Server).
J'utilise Windows 7 et j'utilise PHP version 5.6.12
phpinfo()
indique que la prise en charge ODBC est activée ainsi que la prise en charge de pdo_sqlsrv
Vous devriez peut-être essayer PDO (la différence de performances n’est pas terrible) avec le plugin SQLsrv (c’est ce que j’utilise pour me connecter au logiciel de mon autre patron qui utilise la base de données SQL Server 2008):
$connection = new PDO("sqlsrv:Server=" . $this->sourceServer . ";Database=" . $this->sourceDB, $this->sourceUser, $this->sourcePW);
$connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Vous pouvez télécharger le plugin ici
https://www.Microsoft.com/en-ca/download/details.aspx?id=36434
Sous Xampp, vous devez copier la dll dans ce dossier:
C:\xampp\php\ext
Et vous devez ajouter cette ligne à votre php.ini
extension = php_pdo_sqlsrv_56_ts.dll
Note: N'oubliez pas de redémarrer votre serveur pour qu'il puisse prendre en compte le nouveau fichier php.ini.
Dites-moi si cela marche pour vous
Quelqu'un avait le même message d'erreur et a demandé et répondu à sa propre question ici .
Citer...
Je suis désolé pour les ennuis.
Le problème était que j'utilisais SQL Server Native Client 11.0 comme pilote. Je suis passé à SQL Server et maintenant ça marche:/
Espérons que cela aide au moins quelqu'un, étant dans un problème similaire ....
Une omission importante de votre question concerne la manière dont vous exécutez PHP et avec quels identifiants.
En supposant que vous utilisez IIS ou Apache (ou un autre serveur Web), votre processus PHP s'exécute probablement sous le compte système local:
Comme ce compte est local, il n’est pas autorisé à accéder à votre remote SQL Server.
Vous pouvez modifier le service IIS/Apache pour qu'il fonctionne avec les informations d'identification (les vôtres?) Autorisées à se connecter à SQL Server, mais sachez que cela pourrait entraîner d'autres problèmes d'autorisations avec le service, ainsi qu'un problème si vous modifiez votre mot de passe dans l'avenir.
Essayez d’exécuter un script de test à partir de la ligne de commande (qui devrait s’exécuter avec vos informations d’identification par défaut) pour déterminer l’origine du problème:
php -r "var_dump(odbc_connect(...));"
Cette erreur est une erreur générale due à l'impossibilité d'établir une connexion au serveur pour certaines raisons. Il est important de savoir quel serveur utilisez-vous avec PHP et avec l'application utilisée. Exemple Apache, Xampp ou Wamp etc.
Voici quelques choses que vous pourriez essayer.
Laissez-moi bref, ci-dessous sont les liens de référence.
SQL Server Configuration Manager -> SQL Server Network
Configuration->Protocols for SQL server->TCP/IP(set to enabled)
. Redémarrez les services SQL.Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL
et enregistrez.SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser
défini sur en cours d'exécution.échantillon
$user = 'username';
$pass = 'password';
//Use the machine name and instance if multiple instances are used
$server = 'serverName\instanceName';
//Define Port
$port='Port=1433';
$database = 'database';
$connection_string = "DRIVER={ODBC Driver 11 for SQL Server};SERVER=$server;$port;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);
voici des liens utiles que j'ai trouvés concernant la question
la résolution n'a pas pu ouvrir une connexion à SQL server-errors
fournisseur de serveur SQL nommé erreur de fournisseur de canaux
Regardez aussi ces liens
Fournisseur de canaux nommés: Impossible d'ouvrir une connexion à SQL Server [53]
Regardez le regedit HKLM/SOFTWARE/ODBC
quel est votre nom de dossier?
S'il existe un "SQL Server Native Client 11.0", vous devez écrire votre code php comme
odbc_connect("Driver={SQL Server Native Client 11.0};Server=ip;Database=db;", "user", "pass");
Cependant, certains serveurs comme le serveur 2008 enregistrent cet odbc comme
ODBC Driver 11 for SQL Server
Ensuite, vous devez remplacer SQL Server Native Client 11.0 par le pilote ODBC 11 pour SQL Server.