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 :

fetchall et pdo_oci


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut fetchall et pdo_oci
    Bonjour, j'ai un problème super zarb avec php et le driver pdo oci.
    En gros, je me connecte a la base, je fais une requete basique, un fetchall et j'affiche. le problème, c'est que rien n'est affiché. Aucun message d'erreur, rien.

    La ou c'est vraiment fun, c'est que si je fait un "flush()" mettons au milieu du fichier, il m'affiche tout ce qui était avant.
    Si le flush est ma derniere commande, tout est affiché.
    Si le flush est ma derniere commande php est que derriere, j'ai encore un peu de html pur, tout est affiché jusqu'au flush, mais pas le html se trouvant derriere.

    ob_end_flush(); ne donne rien.

    La table que je tente de lire contient un BLOB. Si j'utilise le même code sans lire de BLOB, ca passe correctement.

    Voici l'intégralité du code pour reproduire le problème :
    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
    35
    36
    37
    38
    39
    40
    <body>
    <?php
     
    $dsn = "oci:dbname=10.199.2.30/oradev1;host=";
    $login = "root";
    $pass = "root";
     
    try
    {
    	$db = new PDO($dsn, $login, $pass);
    	echo ("<u>Connection établie : </u><br />\n");
    	echo ("dsn = " . $dsn . "<br />\n");
    	echo ("login=" . $login . " - pass=" . $pass . "<br />\n");
    } 
    catch (PDOException $e) {
    	printf("Erreur a la connection : %s\n", $e->getMessage()); 
    }
     
    $sql = 'SELECT "content" FROM "f_locale" WHERE "id" = :id AND "lang" = :lang';
    $key = 'modules.auth.backoffice.front.logintitle';
    $lang = 'fr';
    $stmt = $db->prepare($sql);
    $stmt->bindValue(':id', $key, PDO::PARAM_STR);
    $stmt->bindValue(':lang', $lang, PDO::PARAM_STR);
    $stmt->bindColumn('content', $results[0]['content'], PDO::PARAM_LOB);
    if (!$stmt->execute()) {$this->showError($stmt);}
    $results = $stmt->fetchAll();
     
    if (count($results) > 0)
    {
    	$streamContent = stream_get_contents($results[0]['content']);
    	fclose($results[0]['content']);	
    	echo $streamContent;
    } else {
    	echo ("Il n'y a aucun résultat pour la requête.");	
    }
    echo ("<br />");
    ?>
    Hello world !
    </body>
    La table "f_locale" ressemble a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    "id" NOT NULL VARCHAR2(256) 
    "lang" NOT NULL CHAR(2) 
    "package" VARCHAR2(256) 
    "overridden" NUMBER(10)
    "overridable" NUMBER(10) 
    "content" BLOB
    Merci a quiconque aurait un début de piste, parce que j'en viens a me demander si ce n'est pas pdo_oci qui est completement buggé... (Apparament, les CLOB ne sont même pas géré, ce qui m'incite a penser que ce driver n'est pas franchement stabilisé, et le "Ce module est EXPERIMENTAL." qui est sur cette page a tendance a me faire un peu peur.
    Ceci dit, dans la mesure ou le but est de migrer une appli sous mysql vers du oracle et que l'appli en question est faite avec pdo (justement pour être "portable" ) je suis obligé d'utiliser pdo.

    Bref, a l'aide...
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  2. #2
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    Bon, visiblement quand on execute ce code sur une redhat via putty et le php cli, ca marche sans problème. Par contre, si on est directement sur la session, qu'on ouvre un xterm et qu'on execute le même fichier, avec le même php cli, environs une fois sur trois, il affiche un segementation fault.

    Après avoir activé les options qui vont bien pour creer le fichier core et en lisant le fichier core avec gdb on obtient :

    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
    #0  0x0165d960 in kohfri () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #1  0x0165cb39 in kohfrem () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #2  0x0165c1e8 in kohfrr () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #3  0x0165cc0f in kohfrw () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #4  0x014fbd74 in kollfrfn () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #5  0x00fb2907 in kpufdesc () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #6  0x010822fe in OCIDescriptorFree () from /usr/lib/oracle/10.2.0.3/client/lib/libclntsh.so.10.1
    No symbol table info available.
    #7  0x0818fad7 in oci_blob_close (stream=0xb7c7bfa0, close_handle=1)
        at /tmp/downloads/php-5.2.0/ext/pdo_oci/oci_statement.c:626
            self = (struct oci_lob_self *) 0x1bb94a4
            stmt = (pdo_stmt_t *) 0xb7c7bf88
    #8  0x082e4572 in _php_stream_free (stream=0xb7c7bfa0, close_options=167502108)
        at /tmp/downloads/php-5.2.0/main/streams/streams.c:342
            ret = 1
            preserve_handle = 0
            release_cast = 1
    #9  0x082e4aae in stream_resource_regular_dtor (rsrc=0xb000003e)
        at /tmp/downloads/php-5.2.0/main/streams/streams.c:1365
    No locals.
    #10 0x08314409 in list_entry_destructor (ptr=0xb7c7c050) at /tmp/downloads/php-5.2.0/Zend/zend_list.c:184
            ld = (zend_rsrc_list_dtors_entry *) 0x9ec5450
    #11 0x083122a1 in zend_hash_del_key_or_index (ht=0x87146a0, arKey=0x0, nKeyLength=0, h=5, flag=1)
        at /tmp/downloads/php-5.2.0/Zend/zend_hash.c:492
            nIndex = 5
            p = (Bucket *) 0xb7c7c024
    #12 0x083141a4 in _zend_list_delete (id=5) at /tmp/downloads/php-5.2.0/Zend/zend_list.c:58
    Bref, en d'autre terme, c'est la fonction oci_blob_close qui pose problème, fonction du drivers (et donc sur laquelle je n'ai pas la main).

    Si quelqu'un a quand même une idée... j'suis prenneur... vraiment.
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/01/2008, 14h58
  2. [PDO] Problème d'installation PDO_OCI
    Par merzhin dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/10/2007, 10h42
  3. [Oracle] Comment lire les CLOB avec PDO_OCI ?
    Par sloft dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2007, 10h36
  4. Erreur activation oci8.dll ou pdo_oci.dllsur PHP 5
    Par san--antonio dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2006, 14h45
  5. Fatal error: Call to a member function fetchAll()
    Par misterniark dans le forum Zend_Db
    Réponses: 2
    Dernier message: 15/06/2006, 17h29

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