IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP8] Connexion à mssql


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut [PHP8] Connexion à mssql
    Bonjour,
    Je n'arrive pas à me connecter à une base MSSQL 2019.
    J'utilise ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $host_mssql = $serveur_hote_mssql;
    $user_mssql = $utilisateur_bdd_mssql;
    $password_mssql = $motdepasse_bdd_mssql2019;
    $database_mssql = $bdd_mssql;
     
    $connectionInfo = array( "Database"=>$database_mssql, "UID"=>$user_mssql, "PWD"=>$password_mssql, "Encrypt"=>False);
    $conn_mssql = sqlsrv_connect($host_mssql,$connectionInfo);
     
    echo "CONN_MSSQL : $conn_mssql <br />\n";
     
    if( $conn_mssql == true) {
         echo "Connexion établie. : $conn_mssql <br />";
    }
    else{
         echo "La connexion à MSSQL n'a pu être établie.<br />";
         die( print_r( sqlsrv_errors(), true));
    }
    Mon code de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $requete_silo = "SELECT SILO, ZONE, MAT, STOCK FROM SILO ORDER BY ZONE, NO_SILO; ";
    echo "REQUETE = $requete_silo <br />\n";
    $resultat_requete_silo = sqlsrv_query ($conn_mssql, $requete_silo);
    echo "AFF RES REQUETE = $resultat_requete_silo <br />\n";
    if (!$resultat_requete_silo)
    { echo "ERREUR <br /> ";erreur_requete_mssql ($conn_mssql,__FILE__);};
    $nblignes_lister_silo=sqlsrv_num_rows($resultat_requete_silo);
    echo "Nb lignes = $nblignes_lister_silo";
    Avec l'opérateur == j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CONN_MSSQL : Resource id #2
    Connexion établie. : Resource id #2
    REQUETE = SELECT SILO, ZONE, MAT, STOCK FROM SILO ORDER BY ZONE, NO_SILO;
    AFF RES REQUETE = Resource id #4
    Nb lignes =
    mais ma requête ne renvoit pas de résultat (la requête directement sur le manager SQL renvoie bien un résultat)

    Tandis qu'avec l'opérateur === j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONN_MSSQL : Resource id #5
    La connexion à MSSQL n'a pu être établie.
    Array ( [0] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5701 [code => 5701 [2] => [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Le contexte de la base de données a été modifié en 'USINE'. [message] => [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Le contexte de la base de données a été modifié en 'USINE'. ) [1] => Array ( [0] => 01000 [SQLSTATE] => 01000 [1] => 5703 code => 5703 [2] => [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Le paramètre de langue est passé à Français. [message] => [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Le paramètre de langue est passé à Français. ) )
    Une idée pour me débloquer ?
    Merci

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Tu n'as pas de problème de connexion. La connexion est belle et bien établie. Par contre si tu fait une comparaison stricte avec true de ta connexion, ça ne risque pas de marcher vue que sqlsrv_connect() ne renvoie jamais true (voir les valeurs de retour dans le manuel PHP).
    Donc soit tu fais: if( $conn_mssql == true) ce qui revient au même que if( $conn_mssql ), car dans ces deux cas il s'agit d'une comparaison non-stricte à true, soit tu optes pour une comparaison stricte avec false: if ( $conn_mssql !== false ). C'est toi qui voit.

    Le problème c'est sqlsrv_num_rows().
    Si tu regardes dans le manuel PHP la page de sqlsrv_num_rows() en anglais, tu trouveras dans la partie "Return Values" ceci:
    Returns the number of rows retrieved on success and false if an error occurred. If a forward cursor (the default) or dynamic cursor is used, false is returned.
    "forward cursor" et "dynamic cursor" font références à la valeur de l'option Scrollable du tableau d'options de sqlsrv_query(). Comme tu n'as pas renseigné ce tableau d'options dans ton appel à sqlsrv_query() tu as donc la valeur de l'option Scrollable par défaut, soit SQLSRV_CURSOR_FORWARD.

    Pour que sqlsrv_num_rows() te renvoie autre chose que false tu dois choisir soit SQLSRV_CURSOR_STATIC, soit SQLSRV_CURSOR_KEYSET pour cette option. Le site de microsoft évoque également ce point.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Indépendamment du type de curseur choisi, tu peux utiliser sqlsrv_has_rows() pour savoir si ta requête renvoie un résultat.

  4. #4
    Membre éclairé Avatar de arcane
    Inscrit en
    Avril 2003
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 313
    Par défaut
    OK bon, c'est nettement plus complexe que le mssql_query. Pas facile cette migration...

    En modifiant mon script comme cela, c'est bon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( $conn_mssql !== false) { ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    $params_query = array();
    $options_query = array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    $resultat_requete_silo = sqlsrv_query ($conn_mssql, $requete_silo, $params_query, $options_query);
    ...
    J'ai bien mes lignes.

    Les fonctions mssql_xxx ne sont pas transposables en sqlsrv_xxx, il faut toutes les refaire une par une.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur connexion MSSQL
    Par drayrra dans le forum kettle/PDI
    Réponses: 0
    Dernier message: 11/08/2015, 17h19
  2. Problème connexion MSSQL / lancement requête
    Par Canterlot dans le forum C#
    Réponses: 4
    Dernier message: 17/03/2014, 10h15
  3. [PowerShell] Connexion MSSQL sur machine distante
    Par Nicky1 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 21/01/2013, 11h31
  4. [SQL-Server] Connexion Php vers MSSQL Server 2000
    Par Andry dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/07/2006, 13h22
  5. [SQL-Server] Echec de la connexion MSSQL
    Par Bissada dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 24/01/2006, 20h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo