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

PHP & Base de données Discussion :

PHP - Sybase SQL ; afficher le résutat de la procédure stockée [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 45
    Points
    45
    Par défaut PHP - Sybase SQL ; afficher le résutat de la procédure stockée
    Bonjour,

    Je voudrais faire une requête PHP permettant d’exécuter une procédure stockée sybase.(d'avoir le résultat sous forme de tableau).
    Mon but est d'avoir le résultat en entier, c'est à dire afficher tous les champs résultant de cette procédure stockée.

    En m'appuyant sur des posts précedents, j'ai réussi à afficher 1 champ , mais ça n'est pas mon but, je veux afficher le contenu entier.

    Le code que j'ai repris s'appuie sur 2 tableaux ;-((... je n'en veux qu'un seul bien sûr qui contiendrait la totalité de la requête.

    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
     
    $query = "Exec proc_stock_test";
    $result = sybase_query ($query);
     
    while ($elements = sybase_fetch_array($result)) // 1er tableau
    {
    $tbl['toto'][] = $elements['toto'];
    }
     
    foreach($tbl as $colonnes) {
         echo '<table>';
         foreach($colonnes as $values) {
                 echo "<tr>";
                       echo "<td style='text-align:center'>" .$values ."</td>";
               echo "</tr>";
         }
        echo '</table>';
    }
    }

    Merci de votre aide !!

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    sybase_fetch_array retourne tous les champs de la requête dans un tableau. Donc logiquement, si ta procédure renvoie plusieurs champs, ils sont tous dans le tableau retourné par sybase_fetch_array. Fais un var_dump de $elements à l'intérieur de ton while pour vérifier.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    J'ai bien rajouté le VAR_DUMP($elements) dans la boucle while et j'ai toutes les données.
    array(1) { [0]=> array(10) { ["toto_id"]=> string(1) "3" ["toto_currency"]=> string(2) "43" ["toto_number"]=> string(3) "475"
    .......
    Mais comment faire pour n'avoir que les valeurs des champs dans un tableau et non pas les types , titres des champs ...
    Faut-il retirer le while et juste mettre un sybase_fetch_array($result) à la place ?
    ou insérer le sybase_fetch_array($result) dans le while ? et mettre un free_result ?

    J'avoue être un peu perdu dans ma boucle.

    Merci d'avance de votre réponse.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    sybase_fetch_array lit une ligne du résultat. Donc si tu as plusieurs lignes, il te faudra le while pour les parcourir.
    Les types et autres choses de ce type sont affichées par le var_dump.
    Tu peux directement construire ton tableau à l'intérieur du while si tu n'as pas besoin de réutiliser les données pour autre chose :
    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
    $query = "Exec proc_stock_test";
    $result = sybase_query ($query);
     
    echo '<table>'; 
    // parcours des lignes de résultat
    while ($ligne = sybase_fetch_array($result)) {
        echo '<tr>';
        // 1ere colonne
        echo '<td>'.$ligne['toto_id'].'</td>';
        // 2e colonne
        echo '<td>'.$ligne['toto_number'].'</td>';
        // ...
        echo '</tr>';
    }
    echo '</table>';
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 45
    Points
    45
    Par défaut PHP dans HTML
    Merci Celira,

    C'est exactement ce que je voulais !
    Maintenant , je voudrais "habiller" le tableau pour le rendre un peu plus sexy.
    De ce fait, je voudrais utiliser le HTML. J'ai insérer mon php dans mon corps HTML , mais je n'ai aucun résultat.
    Faut-il faire un appel à ma procédure php dans le HTML au lieu de tout rebalancer le code ?
    Je voudrais juste rajouter des cadres pour le moment. J'ai fait un css situé dans le repertoire tout simple.

    Voici mon 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
     
    <!DOCTYPE html>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
     
    <table>
    <tbody>
    <?php
    $dbh = sybase_connect('BASE', 'login', 'mdp');
    $query = "Exec TOTO";
    $result = sybase_query ($query,$dbh);
     
    echo '<table>';
    while ($ligne = sybase_fetch_array($result))
    {
    echo '<tr>';
    echo '<td>'.$ligne['toto_id'].'</td>';
    echo '<td>'.$ligne['toto_ref'].'</td>';
    echo '<td>'.$ligne['toto3'].'</td>';
    echo '<td>'.$ligne['toto4'].'</td>';
    echo '<tr>';
    echo '<table>';
    sybase_close($dbh);
    ?>
    </tbody>
    </table>
     
    </body>
    </html>
    J'ai un message d'erreur de ce style :

    '; while ($ligne = sybase_fetch_array($result)) { echo ''; echo ''; echo ''; echo ''; echo ''; echo ''; echo '
    '.$ligne['toto_id'].' '.$ligne['toto_ref'].' '.$ligne['toto3'].' '.$ligne['toto4'].'
    '; sybase_close($dbh); ?>

    Merci de votre aide.

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ça ressemble fort à du php non interprété ça. Attention, il faut que ton fichier ait une extension en .php et soit accédé via le serveur.
    En d'autres termes, reprend ton script php qui fonctionnait et ajoute le html dedans et non l'inverse .
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Merci pour ta réponse , ça fonctionne très bien.
    J'ai encore une dernière question . Lorsque j'utilise la fonction sybase_connect , j'ai 2 warning qui apparaissent avant mon résultat.

    $dbh = sybase_connect('BASE', 'login', 'mdp');


    Warning: sybase_connect() [function.sybase-connect]: Sybase: Server message: Changed client character set setting to 'iso_1'. (severity 10, procedure N/A) in ...

    Warning: sybase_connect() [function.sybase-connect]: Sybase: Server message: Changed database context to 'nom de la base'.

    Je ne comprend pas pourquoi . J'ai essayé de forcer le charset en iso_1 ($dbh = sybase_connect('BASE', 'login', 'mdp','iso_1'), mais cela fait la même chose ...quant à la 2nde ligne, j'ai ajouté un sybase_connect_db ('nom de la base') sans succès.

    Ca ne me bloque pas, mais c'est assez dérangeant d'avoir 2 warning en haut du résultat.

    Merci pour vos explications.

    Cordialement.

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Points : 45
    Points
    45
    Par défaut
    J'ai résolu mon problème en utilisant les 2 lignes suivantes :

    sybase_min_client_severity(100);
    sybase_min_server_severity(100);

    Encore merci pour votre aide très précieuse.

    Cordialement.

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

Discussions similaires

  1. [SQL Server 2005] print dans une procédure stockée
    Par anayathefirst dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 21/03/2008, 15h50
  2. Réponses: 3
    Dernier message: 02/02/2007, 14h30
  3. Réponses: 3
    Dernier message: 11/07/2006, 16h32
  4. [SQL SERVER 2K]Droits d'exécution procédure stockée
    Par Franck2mars dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 16/05/2006, 15h01
  5. [SQL-Server] Sous requete dans une procédure stockée
    Par Worldofdada dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 09/02/2006, 11h18

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