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

MS SQL Server Discussion :

Conversion appli php/MySQL -> php/MsSQL - Prenage de tête


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut Conversion appli php/MySQL -> php/MsSQL - Prenage de tête
    Bonjour à tous,

    N'ayant jamais bossé en php/Mssql auparavant, je découvre tous un panel de casse tête chinois !

    Est-ce que quelqu'un peut me donner les grandes lignes, c'est à dire les différences entre les deux bases au niveaux des requêtes de sélections avec conditions, requête de pagination, etc...

    Ou à la limite me filer un lien sympa sur les "grosses différences".
    J'ai convertis la base avec un freeware de Mysql à Mssql.
    J'ai eu pas mal de problème avec le formatage des accents etc...

    Maintenant j'en suis à modifier sensiblement mon code et à changer plusieurs types de champs à cause de requête qui foire totalement alors que sous Mysql elles passent sans problème.

    J'ai constaté aussi qu'apparemment les champs de type "TEXT" sous MS sont limités en longueur.
    J'aimerais savoir si il y a d'autres "surprises" de ce type que je peux m'attendre à rencontrer.

    En bref, si vous avez vécu l'expérience, merci de me faire part de vos "exploits" - Moi personnellement je commence à fatiguer

    Merci.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    Par défaut
    Hé ben.... Apelle moi demain matin, qu'on en parle !
    http://www.datasapiens.com/prestations/index.htm

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Ok ça roule !

    Merci du coup de main

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Là par exemple je me rends compte que on ne peut apparemment pas faire de requête avec LIMIT

    Comment on fait ? On se fait chier avec des tableaux ???
    Existe-il un équivalent ?

    Je commence à haïr la personne qui veut ça...
    Je pleure mon MySQL

    Merci.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Points : 484
    Points
    484
    Par défaut
    Citation Envoyé par Joelindien
    Là par exemple je me rends compte que on ne peut apparemment pas faire de requête avec LIMIT

    Comment on fait ? On se fait chier avec des tableaux ???
    Existe-il un équivalent ?

    Je commence à haïr la personne qui veut ça...
    Je pleure mon MySQL

    Merci.
    Je viens de faire une migration de MySQl vers MSSQL. Sans trop de pb en fait.
    1. Pour le LIMIT : J'ai eu le même pb que toi, regarde le POST : Si nous aussi nous avions une FAQ. Tu as une solution possible pour implémenter le LIMIT.
    2. J'ai repris toutes les requêtes une à une à la main. La pluspart fonctionnait sur les deux systèmes sans trop de pb.
    3. J'ai eu un pb pour récupérer le nbr de lignes affectées. Tu as une solution sur le site PHP
    http://www.php.net/manual/fr/functio...s-affected.php

    Je ne peux pas t'être d'une plus grande utilité, ma migration s'étant passée sans pb majeur.
    Un des intérêt est de passer par une couche d'abstraction des données. Tu as PEAR :: DB, par exemple en PHP.

    Même si tu n'utilises pas une telle couche, essaye quand même de centraliser tes accés à la base de donnée, afin de faciliter le portage d'une base vers une autre.
    J'essaye de n'avoir aucune requête SQL dans mon code php "applicatif", je me crée des objets qui manipules les DB.
    --

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Ok merci.

    En fait je n'ai pas eu de problème pour ce qui est de la partie "consultation" mais pour ce qui est de "l'admin" c'est une toute autre histoire !

    J'ai compris pas mal de choses mais j'ai l'impression d'avancer dans le noir... Plus je trouve des solutions, plus j'en ai à chercher !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Excuse moi de te déranger à nouveau, je dois être idiot, je n'arrive pas à voir comment utiliser cette fonction.

    Voici ce que j'ai en php/MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    require("../conf/conf.inc.php");
    $connection = mysql_connect("$sql_serveur","$sql_user","$sql_passwd") 
    or die("$err_serveur_connect");
    $baseselect = mysql_select_db("$sql_bdd",$connection) 
    or die ("$err_serveur_connect");
    $req = "SELECT xxx_id FROM table ORDER BY xxx_id DESC LIMIT 1"; 
    $res = mysql_query($req,$connection); 
    $record_id = mysql_result($res,0); 
    echo "<br />Enregistrement n°$record_id<br />";
    mysql_close($connection);
    ?>
    Oui je sais c'est caca mais avec un MAX, il n'y avait rien à faire non plus

    Si tu pouvais me montrer comment avoir l'équivalent en php/MsSQL tu me serais d'une aide immense

    Merci.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Le "substitue" de LIMIT dans MsSQL Server est TOP (dans la version 2005 je crois que LIMIT est utilisable)

    Et puisque que MAX ne marche pas (???), pour ton problème ça donnerai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 1 xxx_id FROM table ORDER BY xxx_id
    Poy

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 1 xxx_id FROM table ORDER BY xxx_id [color=red]DESC[/color]
    Bien sûr

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Super merci druidus

    Je n'aime pas abuser mais je pense que je vais encore avoir besoin d'aide donc je ne met pas la balise [résolu]

    Ça ne posera pas de problème, j'espère.

  11. #11
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Points : 484
    Points
    484
    Par défaut
    salut,
    si tu veux juste faire .
    SELECT * FROm ....... LIMIT 10

    tu utilise :
    SELECT TOP 10 * FROM ..............

    La fonction php, et le select imbrique sert a remplacer :
    SELECT * FROM .......... LIMIT 100, 10 (impossible en MSSQL)

    (Lorsque tu veux paginer des resultats)

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par druidus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 1 xxx_id FROM table ORDER BY xxx_id [color=red]DESC[/color]
    Bien sûr
    Alors maitenant j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    require("../conf/conf.inc.php");
    $connection = mssql_connect("$sql_serveur","$sql_user","$sql_passwd") 
    or die("$err_serveur_connect");
    $baseselect = mssql_select_db("$sql_bdd",$connection) 
    or die ("$err_serveur_connect");
    $req = "SELECT TOP 1 xxx_id FROM xxx ORDER BY xxx_id DESC"; 
     
    $res = mssql_query($req,$connection); 
    $record_id = mssql_result($res,0); 
    echo "<br />Enregistrement n°$record_id<br />";
    mssql_close($connection);
    ?>
    Et j'ai le Warning suivant et ça ne me retourne rien du tout :

    Warning: Wrong parameter count for mssql_result() in xxx.php on line 32

    Je comprends rien...

    J'ai essayé la solution de SQLPro :

    Et ça me retourne : Resource id #16
    Mon dernier ID n'est pas le 16 sinon le résultat de $res = mssql_query($req,$connection); me pète la même erreur...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Je crois que ton problème viens de ton code PHP plutot que de ta requête.
    A priori l'erreur viens d'une erreur de paramètrage des fonctions mssql_[result|request] (il manque un paramètre ou il y en a un de trop).
    J'imagine que tu a confondu avec la syntaxe des même fonctions en MySQL.

    Désolé je n'ai pas le temps de vérifier les syntaxes respectives aujourd'hui donc tu va devoir regarder dans la doc de référence de PHP .

    Bon courage.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par druidus
    Je crois que ton problème viens de ton code PHP plutot que de ta requête.
    A priori l'erreur viens d'une erreur de paramètrage des fonctions mssql_[result|request] (il manque un paramètre ou il y en a un de trop).
    J'imagine que tu a confondu avec la syntaxe des même fonctions en MySQL.

    Désolé je n'ai pas le temps de vérifier les syntaxes respectives aujourd'hui donc tu va devoir regarder dans la doc de référence de PHP .

    Bon courage.
    Oui tu avais raison !
    C'est cette ligne là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $record_id = mssql_result($res,0);
    Il faut faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $record_id = mssql_result($res,0,0);
    Merci et à bientôt pour le prochain problème

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Maintenant j'aimerais rendre un champ avec possibilité de NULL.

    Est ce que cette procédure est bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ALTER TABLE 'ma_table' MODIFY 'mon_champ' NVARCHAR(50) NULL;
     
    Ou 
     
    ALTER TABLE 'ma_table' MODIFY 'mon_champ' TEXT(255) NULL;
    Forcément que ça n'est pas bon, je vois bien qu'il y a une différence entre MySQL et MsSQL mais je ne vois pas comment former ma requête

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    Essayes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ALTER TABLE ma_table
      ALTER COLUMN mon_champ NVARCHAR(50) NULL;

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Oui c'est bon ça fonctionne
    Merci Druidus !

    Il ne me reste plus qu'une seule chose à corriger.
    J'ai un script de pagination ou plutôt une class mais que j'ai faite pour MySQL.
    Est ce que l'un d'entre vous possède une class de pagination pour MsSQL ?

    Celà me ferait juste gagner du temps, mais je peux m'en faire une.
    Comme d'habitude, je n'aimerais pas donner le sentiment d'abuser

    Pour ce qui est de mes problèmes je remercie toutes les personnes qui ont répondu à ce post, vous m'avez été d'une aide très précieuse.
    Un remerciement spécial à SQLpro

  18. #18
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Se connecter a un serveur de base de donnees distant
    Bonjour a tous,

    J'ai developpe une p'tite application sous php et ms sql serveur 2000 et tout tourne en local normalement avec easyphp 1.7 !

    Maintenant je dois installer ce p'tit soft sur une machine (windows nt 4)en local et me connecter a un serveur sql (ms sql serveur )distant !

    J'ai donc installe easyphp 1.7 les librairies pour attaquer la base sql serveur et bon ...ensuite j'ai installe mes scripts en modifiant le fichier connect .php et en remplacant les valeurs localhost par le nom du serveur distant le login le mdp pass admin mais ca ne marche pas et je n'ai aucun retour d'erreur !

    j'arrive de la machine local a faire un ping vers le serveur distant !
    le nom de cette machine ou se trouve le serveur sql est :

    ba009srv

    j'ai donc essaye de mettre

    \\ba009srv
    \\ba009srv\
    ba009srv
    mais rien n'y fait il ne veut pas se connecter ....et aucun retour d'erreur !

    Donc ma question est celle ci :

    comment faire pour se connecter a un serveur de base de donnees distant ?

    Je vous remercie

    Christophe



    /** CONNECTION A SQL SERVEUR(HOST, LOGIN,MDP) **/
    define("host", "\\ba009srv");
    define("login", "xxxxxxx");
    define("motpasse", "xxxxxxxx");

    /** NOM DE LA BASE DE DONNEES BurgoTest **/
    define("dbnom", "progresburgo");

    ** CONNECTION A MS SQL SERVEUR **/
    $connection = @mssql_connect(host, login, motpasse)
    or die("Impossible de se connecter au serveur ".host ." pour le moment ...");

    /** SELECTION DE LA BASE DE DONNEES **/
    $selectbase = @mssql_select_db(dbnom, $connection)
    or die("La base de données ".dbnom." est inaccessible pour le moment ...");
    ?>

  19. #19
    Candidat au Club
    Inscrit en
    Juillet 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    bonjour kelkun peut m'aider à corriger cet erreur merci
    Fichier :connexion.php
    <?php
    /** CONNECTION A SQL SERVEUR(HOST, LOGIN,MDP) **/
    define("host", "\\RENNDXPRDL0935\GESTCOMP");
    define("login", "Ibrahima");
    define("motpasse", "pis*7178");

    /** NOM DE LA BASE DE DONNEES BurgoTest **/
    define("dbnom", "GESTCOMP");

    /** CONNECTION A MS SQL SERVEUR **/
    $connection = mssql_connect(host, login, motpasse)
    or die("Impossible de se connecter au serveur ".host ." pour le moment ...");

    /** SELECTION DE LA BASE DE DONNEES **/
    $selectbase = mssql_select_db(dbnom, $connection)
    or die("La base de données ".dbnom." est inaccessible pour le moment ...");
    ?>

    Erreur : Fatal error: Call to undefined function: mssql_connect() in c:\program files\easyphp1-7\php_fich\connexion.php on line 11

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 57
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Merci de bien faire attention à la syntaxe.
    Pour simplifier le débogage des applications, il est fortement conseillé de nommer les constantes en majuscules (avec tes define("","")).

    D'autre part, n'ayant pas eu à faire ce genre de manipulation, je ne saurais t'aider plus avant.

    Simple remarque toutefois, je doute que le syntaxe de connexion à la base de donnée soit la même :
    diffère de
    dans l'ordre des paramètres et de leur syntaxe, cf doc officielle de PHP.

    Il te dit simplement que la fonction mssql() telle que tu l'as écrite n'existe pas.
    C'est un problème de syntaxe.

    Bon courage.
    Thierry.

    Bon je viens de voir la date du post...
    J'espère qu'il a trouvé la solution depuis...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/07/2009, 12h20
  2. [PHP-JS] Script PHP/MySql sous MAC
    Par Grumgrum dans le forum Langage
    Réponses: 5
    Dernier message: 30/05/2007, 13h00
  3. [MySQL] Problème PHP/Mysql mon php n'exécute pas la requête
    Par matew dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/04/2007, 13h01
  4. [[xml]->[php]->[MySQL]] script php pour lire du xml
    Par koudjo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 30/06/2006, 03h18

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