Connexion à une base de données MSSQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Connexion à une base de données MSSQL

par Ryle » 27 oct. 2006, 15:57

Y pas de quoi :)

Un p'tit clic sur [Résolu] :?: :)

par phil3513 » 27 oct. 2006, 15:51

Un grand merci à vous et particulièrement à toi Ryle.

Après avoir créé l'alias SQL, sur la machine cliente cela marche du feu de dieu.

Salutations

par Ryle » 27 oct. 2006, 13:06

Pour la piste à explorer, je pensais plus vérifier que la version de la dll utilisée par php convenait bien, et/ou la remplacer par celle de mssql :)

Bon aller, encore un coup pour essayer avec le port en plus ;)
mssql_connect("MYSERVER\\MYINSTANCE,1433","USER","PASSWORD");
Sinon pour l'alias, dans le Client Network Utility tu as un onglet Alias où tu peux ajouter un alias de type Named pipe (Canal nommé) :
Alias : INSTANCE_1 (ou ce que tu veux)
Serveur : NOM_SERVEUR\NOM_INSTANCE

Tu devrais ensuite pouvoir utiliser :
mssql_connect("INSTANCE_1","USER","PASSWORD");

par phil3513 » 27 oct. 2006, 12:29

Il manque des apostrophes dans les testes que tu dis avoir essayé... et par ailleurs une variable passée entre apostrophes ne sera pas interprétée...

Comme je le dis dans mon 1° post j'ai essayé toute les syntaxes y compris les plus folles.

D'après les commentaires que l'on trouve dans la doc, l'antislash devrait être doublé pour être protégé :
mssql_connect("MYSERVER\\MYINSTANCE","USER","PASWWORD");
Après test, cette syntaxe ne marche pas, toujours la même erreur. Pourtant je suis bien en PHP5 et mes tests se font avec un EDI PhpED et la DLL est bien présente.

Sinon, voici peut être une piste à exporer :
If you try to connect to a host with multiple SQL-Server instances, you have to copy the ntwdblib.dll from a MS SQL 2000 installation to the system32 directory of your webserver.

The ntwdblib.dll bundled with php 4.3.4 does not support multpiple server instance.

I used the DLL version 2000.80.194.0 that came with MS SQL Server 8.00.194.

Example:
$dbhost="server_name\instance_name,port_number";
$dbuser="foo";
$dbpass="foo";
$dbname="foo";
$db=mssql_connect($dbhost,$dbuser,$dbpass);
mssql_select_db($dbname,$db);
Cette syntaxe aussi revoie la même erreur.
Au pire, tu dois pouvoir créer un alias sur ton serveur et l'utiliser directement :)
Par alias tu entends un alias DNS ?

Merci beaucoup de ton aide

par Ryle » 27 oct. 2006, 10:56

Il manque des apostrophes dans les testes que tu dis avoir essayé... et par ailleurs une variable passée entre apostrophes ne sera pas interprétée...
D'après les commentaires que l'on trouve dans la doc, l'antislash devrait être doublé pour être protégé :
mssql_connect("MYSERVER\\MYINSTANCE","USER","PASWWORD");
Sinon, voici peut être une piste à exporer :
If you try to connect to a host with multiple SQL-Server instances, you have to copy the ntwdblib.dll from a MS SQL 2000 installation to the system32 directory of your webserver.

The ntwdblib.dll bundled with php 4.3.4 does not support multpiple server instance.

I used the DLL version 2000.80.194.0 that came with MS SQL Server 8.00.194.

Example:
$dbhost="server_name\instance_name,port_number";
$dbuser="foo";
$dbpass="foo";
$dbname="foo";
$db=mssql_connect($dbhost,$dbuser,$dbpass);
mssql_select_db($dbname,$db);
Au pire, tu dois pouvoir créer un alias sur ton serveur et l'utiliser directement :)

par phil3513 » 26 oct. 2006, 19:35

Merci pour votre aide, voici quelques renseignements supplémentaires.
Mon serveur est un serveur MSSQL 2000 et non un serveur lite de type MSDN 2000 ou Express 2005 et les deux instances sont en production donc utilisées par d'autres programmes sans aucun problème.
Dans le cas des instances multiples (16 max en 2000) sur un même serveur le port d'écoute est commun (1433) et c'est à la lecture du nom de l'instance que le moteur choisi l'instance en question. Je pense que PHP dans le cas d'une instance nommée (serveur\inst1) ne sait pas présenter le nom de l'instance au socket.

J'ai testé votre syntaxe ainsi qu'une autre et j'ai la même erreur.
$link = mssql_connect ('serveursql\inst1:1433,$util,$mdp) or die ('Erreur de connexion ' );
$link = mssql_connect (serveursql\$inst1',$util,$mdp) or die ('Erreur de connexion ' );

Cordialement

par sadeq » 26 oct. 2006, 16:43

Les paramètres de connexion sont bien :
le serveur\l'instance,le port + userId et pwd (pour l'authentification SQL Server et non Windows sécurisée)

Les erreurs possibles dans ton cas:
  • 1. tu n'as pas installé la 2° instance dans un répertoire différent de la 1° (peu probable)
    2. tu as utilisé le même port pour les deux instances (peu probable)
    3. tu n'as pas enregistré la 2° instance (fort probable)
    4. tu n'as pas démarré les services de la 2° instance (fort probable)

Connexion à une base de données MSSQL

par phil3513 » 26 oct. 2006, 16:09

J'ai un problème en php qui doit toucher d'autre administrateur mais il n'y en a pas trace sur le net.
Je vous présente le problème en question.

Sur un serveur W2003 il y a deux instances SQL qui tournent. Serveursql et Serveursql/inst1.
Pour mes tests j'ai installé la même base sur les deux instances sql
Je cherche à me connecter sur ces bases.
* instance Serveursql
$svr = 'Serveursql';
$util = 'masession';
$mdp = 'mdpamoi';
$bdd='mabase';
$link = mssql_connect ($svr,$util,$mdp) or die ('Erreur de connexion ' );
ou
$conn = new PDO('mssql:host=$svr;dbname=$bdd, $user, $pass) or die ('Erreur de connexion ');
Cela marche parfaitement

* instance Serveursql\inst1
$svr = 'Serveursql\inst1';
$util = 'masession';
$mdp = 'mdpamoi';
$bdd='mabase';
$link = mssql_connect ($svr,$util,$mdp) or die ('Erreur de connexion ' );
ou
$conn = new PDO('mssql:host=$svr;dbname=$bdd, $user, $pass) or die ('Erreur de connexion ');
Dans ce cas cela ne marche pas

Voici le message d'erreur.
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: serveursql\INST1 in X:\tesconnect.php on line 50

J'ai essayé le slash, double slash, anti slash, double anti slashe, :1433, simple cote, double cote et plein d'autres bétises ......
Comment faire ????
Je vous remercie de votre aide