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

Développement SQL Server Discussion :

Pb d'execution requete sql a partir de php


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Pb d'execution requete sql a partir de php
    Bonjour

    J'ai installé le drivers Microsoft pour PHP (SQL-Server Driver for PHP Version 1.0 and Version 1.1) pour me connecter à une base SQL-Server à partir de PHP, jusque là pas de problème.

    J'arrive parfaitement à partir de PHP à exécuter des requêtes classiques type select, insert...
    Je dois créer une nouvelle table dans ma base : pas de probleme j'arrive à le faire a partir de PHP.

    Ensuite j'ai une requête qui prend le contenu d'une autre table de ma base, qui effectue un certain nombre de modifications sur des dates et qui stocke dans la table que je viens de créer les données modifiées.

    Le script marche parfaitement quand je l'exécute manuellement sous management studio de SQL-Serveur (exécution du script en 4-5 sec) par contre à partir de PHP la requête ne s'exécute pas totalement des fois il traite 100 enregistrements la fois d'après il en traite 140 ensuite 80...
    Jamais pareil (le traitement de la requête avec PHP prend environ une seconde et s'arrête sans renvoyer aucune erreur).

    Ma requête est une boucle while qui fait uniquement appel à des déclarations de variable, récupération d'info avec des select dans une table puis sauvegarde du résultat dans des variables, ensuite avec un insert je stocke dans ma nouvelle table mes variables.

    Quelqu'un a-t-il déjà rencontré ce genre de problème ?
    J'ai vérifié du côté de PHP je n'ai pas de timeout défini.

    Merci pour votre aide.

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Peut-on voir le code ?
    Most Valued Pas mvp

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut code sql de la requête qui est exécutée
    Bonjour

    Voila la requête SQL qui s'exécute parfaitement avec management studio mais qui refuse de s'exécuter complètement à distance (aucune erreur) en passant par le driver Microsoft PHP vers MS SQL Server :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    USE [zapsis]
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TMPDATE]') AND type in (N'U'))
    	DROP TABLE [dbo].[TMPDATE]
     
    CREATE TABLE dbo.TMPDATE([cardid] [int] NOT NULL,[birthday] [date] NULL,[c_creation_date] [date] NULL,[c_last_use] [date] NULL,[c_expire_date] [date] NULL)
     
      DECLARE @nb AS INT, @i AS INT,@cardid AS INT
      DECLARE @birthday AS DATE,@c_creation_date AS DATE,@c_last_use AS DATE,@c_expire_date AS DATE
      DECLARE @year AS VARCHAR(4)
      DECLARE @mnaiss AS VARCHAR(2),@jnaiss AS VARCHAR(2)
      DECLARE @mcrea AS VARCHAR(2),@jcrea AS VARCHAR(2)
      DECLARE @mlastuse AS VARCHAR(2),@jlastuse AS VARCHAR(2)
      DECLARE @mexpire AS VARCHAR(2),@jexpire AS VARCHAR(2)
     
      SELECT @nb= MAX(dbo.cards.cardid) FROM dbo.cards
      SET @i = 1
      SET @year= '2012'
      WHILE @i <= @nb
    	BEGIN
    	IF (SELECT cardid from dbo.cards WHERE cardid=@i)>0
    		BEGIN
    			SELECT @cardid= cardid,@mnaiss= MONTH(birthday),@jnaiss= DAY(birthday), @mcrea= MONTH(c_creation_date),@jcrea= DAY(c_creation_date), @mlastuse= MONTH(c_last_use),@jlastuse= DAY(c_last_use), @mexpire= MONTH(c_expire_date),@jexpire= DAY(c_expire_date) FROM dbo.cards WHERE cardid			SET @birthday= cast(@year+'-'+@mnaiss+'-'+@jnaiss AS DATE)
    		SET @c_creation_date= cast(@year+'-'+@mcrea+'-'+@jcrea AS DATE)
    		SET @c_last_use= cast(@year+'-'+@mlastuse+'-'+@jlastuse AS DATE)
    		SET @c_expire_date= cast(@year+'-'+@mexpire+'-'+@jexpire AS DATE)
    		INSERT INTO dbo.TMPDATE (cardid,birthday,c_creation_date,c_last_use,c_expire_date)VALUES(@cardid,@birthday,@c_creation_date,@c_last_use,@c_expire_date)
    	END
    		SET @i = @i + 1
    END
    Merci pour votre aide.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Etes-vous certain que deux instances de codes ne se lancent pas en parallèle ?

    En termes de performances, n'est-il pas possible de remplacer tout ce code en une seule requête ?

    Avez-vous lancer un analyse avec SQL Server Profiler ? Ainsi que de surveiller la connexion via le moniteur d'activités de SSMS ?

    Cordialement,

    PGeiger

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Pouvez-vous vérifier et indenter le code que vous nous présenter ?
    Most Valued Pas mvp

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Code corriger
    Bonjour

    Erreur de copier / coller, voila le bon code :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    USE [zapsis]
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TMPDATE]') AND type in (N'U')) DROP TABLE [dbo].[TMPDATE]
     
    CREATE TABLE dbo.TMPDATE([cardid] [int] NOT NULL,[birthday] [date] NULL,[c_creation_date] [date] NULL,[c_last_use] [date] NULL,[c_expire_date] [date] NULL)
    DECLARE @nb AS INT, @i AS INT,@cardid AS INT
    DECLARE @birthday AS DATE,@c_creation_date AS DATE,@c_last_use AS DATE,@c_expire_date AS DATE
    DECLARE @year AS VARCHAR(4)
    DECLARE @mnaiss AS VARCHAR(2),@jnaiss AS VARCHAR(2)
    DECLARE @mcrea AS VARCHAR(2),@jcrea AS VARCHAR(2)
    DECLARE @mlastuse AS VARCHAR(2),@jlastuse AS VARCHAR(2)
    DECLARE @mexpire AS VARCHAR(2),@jexpire AS VARCHAR(2)
     
    SELECT @nb= MAX(dbo.cards.cardid) FROM dbo.cards
    SET @i = 1
    SET @year= '2012'
    WHILE @i <= @nb
    BEGIN
     
     
        if (select cardid from cards WHERE cardid=@i)>0
        BEGIN
     
     
            SELECT @cardid= cardid,@mnaiss= MONTH(birthday),@jnaiss= DAY(birthday), @mcrea= MONTH(c_creation_date),@jcrea= DAY(c_creation_date), @mlastuse= MONTH(c_last_use),@jlastuse= DAY(c_last_use), @mexpire= MONTH(c_expire_date),@jexpire= DAY(c_expire_date) FROM cards WHERE cardid=@i
            SET @birthday= cast(@year+'-'+@mnaiss+'-'+@jnaiss AS DATE)
            SET @c_creation_date= cast(@year+'-'+@mcrea+'-'+@jcrea AS DATE)
            SET @c_last_use= cast(@year+'-'+@mlastuse+'-'+@jlastuse AS DATE)
            SET @c_expire_date= cast(@year+'-'+@mexpire+'-'+@jexpire AS DATE)
            INSERT INTO dbo.TMPDATE(cardid,birthday,c_creation_date,c_last_use,c_expire_date)VALUES(@cardid,@birthday,@c_creation_date,@c_last_use,@c_expire_date)
     
        END
        SET @i = @i + 1
     
    END

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Quel mic-mac ! Pourquoi tant de haine ?

    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
    USE [zapsis]
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TMPDATE]') AND type in (N'U')) DROP TABLE [dbo].[TMPDATE]
     
    CREATE TABLE dbo.TMPDATE([cardid] [int] NOT NULL,[birthday] [date] NULL,[c_creation_date] [date] NULL,[c_last_use] [date] NULL,[c_expire_date] [date] NULL)
     
    DECLARE @year AS INT
    SET @year = 2012
     
    INSERT INTO dbo.TMPDATE(cardid,birthday,c_creation_date,c_last_use,c_expire_date)
    SELECT
     cardid
    , DATEADD(yyyy, @year - DATEPART(yyyy, birthday), birthday)
    , DATEADD(yyyy, @year - DATEPART(yyyy, c_creation_date), c_creation_date)
    , DATEADD(yyyy, @year - DATEPART(yyyy, c_last_use), c_last_use)
    , DATEADD(yyyy, @year - DATEPART(yyyy, c_expire_date), c_expire_date)
    FROM dbo.cards
    WHERE cardid > 0
    Most Valued Pas mvp

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Ca marche
    Bonjour

    merci pour votre aide

    et oui je sais je ne suis pas un grand connaisseur de sql j'apprend sur le tas desoler

    j'ai appris quelque chose grace a vous nickel

    un grand merci ca m'enleve une epine du pied
    Loic

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

Discussions similaires

  1. executer les requetes sql a partir de l'access
    Par fleurrouge dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/08/2009, 04h24
  2. appel de methodes et execution requete SQL
    Par oceane751 dans le forum Langage
    Réponses: 2
    Dernier message: 16/01/2008, 15h56
  3. Réponses: 5
    Dernier message: 21/06/2007, 14h31
  4. appeler une requete sql a partir d'un button
    Par kroma23 dans le forum Bases de données
    Réponses: 2
    Dernier message: 13/05/2007, 18h51
  5. Réponses: 2
    Dernier message: 23/11/2006, 14h02

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