Connexion au serveur SQL en utilisant L'authentification PHP, ODBC et Windows
j'essaie D'utiliser PHP pour me connecter à une source de données ODBC en utilisant L'authentification Windows. Je peux très bien me connecter au serveur de SQL Server donc je sais qu'il est en cours d'exécution. Lorsque j'essaie d'exécuter la commande
$link = odbc_connect("my_odbc","","");
j'obtiens l'erreur:
"Warning: odbc_connect(): erreur SQL:
[Microsoft] [ODBC Driver 11 for SQL Server] [SQL Server]
échec de la connexion pour l'utilisateur"., État SQL 28000 en SQLConnect en C:Users..."
j'ai essayé:
$link = odbc_connect("Driver={ODBC Driver 11 for SQL Server};
Server='my_odbc';Integrated Security=SSPI","","");
Qui a retourné le message:
Avertissement: odbc_connect(): erreur SQL:
[Microsoft][Pilote ODBC 11 pour SQL Server]
fournisseur de Pipes nommé: impossible d'ouvrir une connexion au serveur SQL [53]. , État SQL 08001 en SQLConnect en C:Users..."
Je ne suis pas sûr de ce que je fais mal.
my_odbc
est un serveur SQL (2008) sur un autre machine. Je n'ai pas de privilèges admin sur cette base de données, donc je ne peux rien y changer (comme activer L'authentification SQL Server).j'exécute Windows 7 et j'utilise PHP Version 5.6.12
phpinfo()
indique que le Support ODBC est activé aussi bien quepdo_sqlsrv
soutien
6 réponses
peut-être que vous devriez essayer PDO (la différence de performance n'est pas si grande) avec le plugin SQLsrv (c'est ce que j'utilise pour me connecter au logiciel de mon autre boss 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
Dans Xampp, vous devez copier la dll dans le dossier:
C:\xampp\php\ext
Et vous devez ajouter cette ligne à votre php.ini
extension = php_pdo_sqlsrv_56_ts.dll
Remarque:: n'oubliez pas de redémarrer votre serveur pour qu'il puisse prendre en compte le nouveau php.fichier ini.
Laissez-moi savoir si cela fonctionne pour vous
Quelqu'un a eu le même message d'erreur et a demandé et répondu à sa propre question ici.
Pour citer...
je suis désolé pour les ennuis.
le problème était que J'utilisais SQL Server natif Client 11.0 comme pilote. Je l'ai commuté sur SQL Server et maintenant il fonctionne:/
espérons que cela aide au moins quelqu'un, étant dans un problème similaire....
une omission importante de votre question Est de savoir comment vous utilisez PHP et avec quels justificatifs d'identité.
en supposant que vous utilisez IIS ou Apache( ou un autre serveur web), alors votre processus PHP tourne probablement sous le compte système local:
puisque ce compte est il n'a pas l'autorisation d'accéder à votre distance SQL Serveur.
Vous pouvez modifier le service IIS/Apache pour exécuter avec les justificatifs d'identité (le vôtre?) qui sont autorisés à se connecter au serveur SQL, mais soyez conscient que cela pourrait causer d'autres problèmes de permissions avec le service ainsi que d'être un problème si vous changez votre mot de passe dans le futur.
essayez d'exécuter un script de test à partir de la ligne de commande (qui devrait s'exécuter avec vos identifiants par défaut) pour déterminer où le problème est:
php -r "var_dump(odbc_connect(...));"
cette erreur est une erreur générale qui résulte de l'impossibilité de se connecter au serveur pour certaines raisons. Il est important de savoir quel serveur vous utilisez avec PHP et l'application utilisée avec elle. Exemple Apache, Xampp ou Wamp etc.
voici quelque chose que vous pourriez essayer.
permettez-moi de résumer, ci-dessous sont les liens de référence.
- Vérifier si il envoie un ping
- activer la Configuration du serveur SQL de connexion TCP/IP si elle n'est pas activée. Pour ce faire, ouvrez
SQL Server Configuration Manager -> SQL Server Network Configuration->Protocols for SQL server->TCP/IP(set to enabled)
. Redémarrez les services SQL. - activer la connexion à distance à partir du serveur
- Ouvrir le Port, De le faire
Windows Firewall Settings-> Exceptions -> add a Port (Name:SQL;Port:1433;TCP) then from Exceptions tick SQL
et enregistrer. - Activer l'exécution des services de navigateur.
SQL Server Configuration Manager -> SQL Server Services - > SQL Server Browser
prêt à courir. - définition du Port dans la chaîne de connexion
- ajouter le nom de l'instance avec le nom de la machine si plus d'une instance est utilisé
exemple
$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é concernant la question
résolution impossible d'ouvrir une connexion à sql server-les erreurs
fournisseur sql server nommée fournisseur de canaux d'erreur
consultez aussi ces liens
Fournisseur de canaux Nommés: impossible d'ouvrir une connexion à SQL Server [53]
Look at the regedit HKLM/SOFTWARE/ODBC
quel est le nom de votre dossier ?
S'il y a un "client natif SQL Server 11.0" alors vous devez écrire votre code php comme
odbc_connect("Driver={SQL Server Native Client 11.0};Server=ip;Database=db;", "user", "pass");
cependant, certains des serveurs comme server 2008 enregistreront cette odbc comme
ODBC Driver 11 for SQL Server
alors vous devez remplacer SQL Server Native Client 11.0 par ODBC Driver 11 pour SQL Server.
Enable in IIS on Manager PHP o PDO_ODBC:
j'ai authentifié par Windows avec la déclaration PHP suivante:
$ Conn = new PDO ("odbc: Driver = {SQL Server}; Server = JAMILI-PC \ SQLEXPRESS; null; null");
J'utilise Windows 2008.
j'espère que ça résoudra votre problème.