Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    PDO stamapa di piu record

    Vorri passare dalle funzioni mysql a PDO.

    Il codice qui sotto è un pezzo di classe che esegue funzioni db tramite PDO
    codice:
    function connect()
    {
    global $host; global $db_name; global $db_user; global $db_psw;
    $con_db = 'mysql:host='.$host.';dbname='.$db_name;
    try
    {	/*tentativo di connessione*/ $db = new PDO($con_db , $db_user, $db_psw);	}
    catch(PDOException $e)
    {	echo 'Attenzione connessione al database fallita: '.$e->getMessage();	}
    return $db;
    }
    
    function query($sql)
    { 
    $db = $this->connect();
    $db->beginTransaction(); /*disabilitazione dell'auto-commit*/
    $query = $db->prepare($sql);
    $query->execute();
    $result = $db->commit(); /* applica le modifiche*/
    return $query;
    }
    
    function fetch_both($result)
    {
    try
    {
    $db = $this->query($result);
    $result = $db->fetch(PDO::FETCH_BOTH);
    }
    catch(PDOException $e)
    {	echo 'Attenzione funzione fetch_both: '.$e->getMessage();	}
    return $result;
    }
    La pagina dove richiamo la classe
    codice:
    <?php $pagina= new pagine();
    
    $pagine = $pagina->pagina('index');
    while ($dettagli_pagina = $pagina->fetch_both($pagine))
    {echo $dettagli_pagina['nome'].' '.$dettagli_pagina['testo'];
    }?>
    IL PROBLEMA:
    se tolgo il while mi stampa il 1° record senza problemi.
    Se cerco tramite un ciclo di stampare più record mi stampa tante volte solo il 1° record poi si interrompe per troppo tempo di esecuzione.

    Aiuto

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    mi pare normale...ogni volta che richiami $pagina->fetch_both() rifai la query.

    O fai così:
    Codice PHP:
    <?php
    function fetch_both($result)
    {
    try
    {
    $db $this->query($result);
    $result $db->fetchAll(PDO::FETCH_BOTH);
    }
    catch(
    PDOException $e)
    {    echo 
    'Attenzione funzione fetch_both: '.$e->getMessage();    }
    return 
    $result;
    }

    ...
    // nella pagina


     
    $pagina= new pagine();

    $pagine $pagina->pagina('index');
    $records $pagina->fetch_both();
    foreach(
    $records as $dettagli_pagina)
    {echo 
    $dettagli_pagina['nome'].' '.$dettagli_pagina['testo'];
    }
    ?>
    Oppure ti salvi il risultato della query in un campo della classe e fai una funzione per il fetch

    Codice PHP:
    <?php
    function fetch_both($result)
    {
    try
    {

    return 
    $this->results->fetch(PDO::FETCH_BOTH);
    }
    catch(
    PDOException $e)
    {    echo 
    'Attenzione funzione fetch_both: '.$e->getMessage();    }

    }

    function 
    query($sql)

    $db $this->connect();
    $db->beginTransaction(); /*disabilitazione dell'auto-commit*/
    $query $db->prepare($sql);
    $query->execute();
    $this->results $db->commit(); /* applica le modifiche*/

    }

    ...

     
    $pagina= new pagine();

    $pagine $pagina->pagina('index');
    $pagina->query(...);
    while (
    $dettagli_pagina $pagina->fetch_both($pagine))
    {echo 
    $dettagli_pagina['nome'].' '.$dettagli_pagina['testo'];
    }
    ?>

  3. #3
    Mi hai aiutato tanto. Grazie

  4. #4
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626


    Ps: ho fatto un piccolo (mica tanto) errore, nel secondo caso query dovrebbe essere

    Codice PHP:
    function query($sql)

    $db $this->connect();
    $db->beginTransaction(); /*disabilitazione dell'auto-commit*/
    $query $db->prepare($sql);
    $query->execute();
    $db->commit(); /* applica le modifiche*/
    $this->results $query;


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.