Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31
  1. #1
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497

    PDO::warning("XXX thread")

    Ciaoz a todos.

    visto che devo cambiare sistema di gestione databases mi sto mettendo a raffica su PDO ...

    Sto implementandomi una classe che estenda PDO (tramite object injection non con extends normale viste le necessità che ho) .

    In questa mia bella classina sto impostando il metodo doQuery($q) per l'esecuzione di query generiche.
    Bene una volta eseguita tale query mi viene restituito il PDOStatement etc.. (uso PDO::query() )
    Non trovo il modo di capire se la query eseguita e' una select o altro, visto che i risultati sono differenti(ad esempio il contatore di righe ) la gestione del fetch dei dati etc.........

    Esiste 1 modo per capire se la query che ho eseguito e' stata di tipo select o altro ?

    Devo capirlo per popolare correttamente l'oggetto che vado a rispondere (devo rispettare alcuni standard come ad esempio il risultato delle operazioni)

    Any ideas ?

  2. #2
    C'era un post qualche tempo fa in cui qualcuno aveva postato una classe che faceva qualcosa del genere, ma se non mi ricordo male utilizzava le espressioni regolari sulla stringa contenente la query passata come parametro per stabilire l'operazione effettuata.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    E' proprio quello che vorrei evitare...
    insomma usando la mysql_query e analizzandone il risultato si capise sempre e senza alcun dubbio che tipo di query sto facnedo ....

    Mi sa che dovro fare un acrocchio del tipo :

    - impostare la gestione degli errori come eccezzioni
    - a tempo di fetch dei risultati grabbare l'eccezione relativa e quindi capire che ho fatto insert,delete o update invece di select...

    pero' mi sembra un poco folle come cosa.....

  4. #4
    Nella classe che mi son scritto, se può esserti utile, baso tutto sui prepared statement. Quando ho bisogno di eseguire una query passo un array di parametri alla classe con dentro la query, i bind e il tipo di fetch. Nel caso di errore c'è anche un gestore di errori che mette tutto su un txt.
    Se non ti piace come metodo puoi sempre creare vari metodi all'interno della classe per la costruzione dei vari tipi di query e crei un altro metodo per selezionare il metodo utile a cui passi un array tipo method => 'select'.
    Fare o non fare....non c'è provare!

  5. #5
    Si concordo che il sistema della regex non sia dei migliori, ma googlando un po' non ho tovato altre soluzioni. Non mi sembra che il PDOStatement permetta di risalire al tipo di query eseguita.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    @sbidigudda troppo complesso e macchinoso come sistema.
    sinceramente la classe db dovrebbe essere agile e volece da usare nell'80 dei casi e fornire un risultato stanrdizzato all'applicazione (io uso di default il fetchobject() e d'ora in poi tutto ORM)
    Questa cosa mi consente di astrarre veramente la classe PDO e avere un layer piu' agile e di piu' alto livello. Non sono molto pro la tua soluzione la vedo come un re-inventare la ruota e non apporti alcun livello di astrazione superiore ma solamente una redifizione dei comportamenti piu' adatta alle tue esigenze.


    Preparare gli statemets etc... certo e' utile e potrebbe essere 1 strada ma e' uno step 2, ossia e' una cosa che voglio implementare ma solo quando ho completato alcune cose come adppunto i metodi di livello piu' basso della classe. In questo caso il metodo doQuery() deve operare identificando la tipologia di query indipendentemente dai metadati passati.

    @staifal eh anche io ho guglato precchio e non ho trovato molto, non credo ci sia una strada ne un workaround per ottenere questa informazione.
    L'unica soluzione che ho trovato lavorando sull'oggeto pdo e' che se lo imposto per gestire ogni errore come se fosse un'eccezione allora posso controllare il risultato ma devo ancora testare in caso di errore della select o di empty set....

    Grazie delle info raga stasera mi rimetto sopra e vedo di tirarne fuori qualcosa di fatto bene .

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    La butto li, potresti analizzare i risultati provenienti dal metodo statment debugDumpParams
    alla fine dell'esecuzione

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    e' un metodo che non avevo considerato visto il suo nome .... pero' si ci do un occhio stasera/notte poi vi so dire

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da Virus_101
    e' un metodo che non avevo considerato visto il suo nome .... pero' si ci do un occhio stasera/notte poi vi so dire
    Ho visto ora che il metodo non torna un valore ma stampa direttamente la query più
    i parametri a questo punto potresti gestirlo tramite le funzioni ob cercando poi
    o tramite espressioni regolari o altri metodi se sono presenti parole chiave tipo SELECT, DELETE o altro e analizzando i parametri insomma vedi te

    http://it2.php.net/manual/en/pdostat...dumpparams.php


    Anche se a questo punto potresti gestirlo analizzando direttamente la query che arriva

  10. #10
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    non va bene come controllo non mi piace e non lo faroò usare regex per ste cose e' darsi la zappa sui piedi... non sei mai sicuro al100% e per quest procedure ho ho la sicurezza al 100% oppure lo faccio in altro modo.

    ho una mezza ideuccia cmq...stanotte la implemento...stavo aspettando qualche info piu' specifica ma visto che pare non ci sia modo migliore forse stanotte ho il metodo funzionante come dico io.


    Appena ho fatto vi faccio sapere a tutti

    P.S.
    Io mi chiedo perche' chi sviluppa queste libs/classi si perde in bicchieri d'h2o .... maledetti.

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.