Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & ODBC
PHP & ODBC Forum d'entraide sur ODBC avec PHP. Avant de poster -> FAQ ODBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/02/2012, 15h45   #1
s.toubal
Futur Membre du Club
 
Homme Sid Ahmed TOUBAL
Ingénieur développement logiciels
Inscription : juillet 2010
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Sid Ahmed TOUBAL
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2010
Messages : 50
Points : 19
Points : 19
Envoyer un message via MSN à s.toubal Envoyer un message via Skype™ à s.toubal
Par défaut pérformances de odbc_fetch_row

salut,
j'utilise un scripte php comme Webservice pour accéder à SQLSERVER à partir de Silverlight ça marche très bien sauf que ça prend beaucoup de temps pour me renvoyer un résultat (5 a 8 secondes pour retourner 10 000 lignes)
ce qui est largement loin de 1 seconde avec un Service WCF sur la même BDD et le même serveur
du coup je me demande si le problème viens de mon scripte ou c'est vraiment un problème de performance de odbc_fetch_row
voici mon scripte :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
include 'sqlserver_vars.php';
$Requete = $_GET['Requete'];
if($Requete != NULL and $Requete != "")
{
    $connection = odbc_connect("Driver={SQL Server};Server=$server;Database=$db",$dbUsername,$dbPassword) ;
    $Resultat= odbc_exec($connection, $Requete);
    $NbrChamps = odbc_num_fields($Resultat);                
    $data = array();    
    while($itemRow = odbc_fetch_row($Resultat))
    {        
        $lig = array();    
        for($i=1;$i<=$NbrChamps;$i++)
        {
            $val = utf8_encode(odbc_result($Resultat,$i ));
            array_push($lig,$val);
        }    
        array_push($data,$lig);
    }
    echo json_encode($data);
    odbc_close($connection);
}
s.toubal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 17h31   #2
glen1789
Membre actif
 
Homme Glen Rhodes
Étudiant
Inscription : novembre 2009
Messages : 139
Détails du profil
Informations personnelles :
Nom : Homme Glen Rhodes
Âge : 25
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2009
Messages : 139
Points : 175
Points : 175
Bonjour,

Je n'ai pas d'infos sur les performances d'odbc en php mais je peux par contre proposer une petite astuce pour optimiser le code présenté. Ce code utilise array_push pour rajouter à la fin des tableaux $lig et $data. Dans la doc officielle ils conseillent d'utiliser la forme équivalente:
afin d'éviter d'appeler inutilement une fonction.
Je ne sais pas quel impact cela aura sur le temps d’exécution du script mais c'est peut-être une piste.
glen1789 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 09h56   #3
rawsrc
Modérateur
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 2 601
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 36
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 2 601
Points : 6 132
Points : 6 132
Envoyer un message via Skype™ à rawsrc
Bonjour,

en reprenant ton code de manière plus optimale, cela donnerait ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include 'sqlserver_vars.php';
 
$sql  = isset($_GET['Requete']) ? $_GET['Requete'] : '';
$data = array();
 
if (strlen($sql)) {
   $cnx = odbc_connect("Driver={SQL Server};Server=$server;Database=$db",$dbUsername,$dbPassword) ;
   $qry = odbc_exec($cnx, $sql);
   while($row = odbc_fetch_array($qry)) {
      $data[] = array_map('utf8_encode', $row);
   }
}
odbc_close($cnx);
echo json_encode($data);
 
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 11h20   #4
s.toubal
Futur Membre du Club
 
Homme Sid Ahmed TOUBAL
Ingénieur développement logiciels
Inscription : juillet 2010
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Sid Ahmed TOUBAL
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2010
Messages : 50
Points : 19
Points : 19
Envoyer un message via MSN à s.toubal Envoyer un message via Skype™ à s.toubal
merci pour votre réponse,
efffictivement pour le push jai chercher la facilité, je vais faire des testes avec la nouvelle optimisation et je vous en dirais des nouvelles
s.toubal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 11h51   #5
s.toubal
Futur Membre du Club
 
Homme Sid Ahmed TOUBAL
Ingénieur développement logiciels
Inscription : juillet 2010
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Sid Ahmed TOUBAL
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2010
Messages : 50
Points : 19
Points : 19
Envoyer un message via MSN à s.toubal Envoyer un message via Skype™ à s.toubal
je viens de faire un test , (tout les serveurs sont sur localhost)
je m’attendait a voir une diference mais c'est finalement pareille
après une dizaine d’exécutions de chaque version du scripte jais u :
  1. meilleure score pour l'ancien scripte : 5,95 secondes
  2. meilleure score pour le nouveau scripte : 5,05 secondes
donc une seconde de mieux (c'est déjà ça) mais c'est aléatoire des fois les deux scriptes prennent jusqu’à 10 secondes
apparemment c'est le fetch_row qui est lourd
s.toubal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h13.


 
 
 
 
Partenaires

Hébergement Web