• Off-topic
  • Programmare in PHP nel 2021 ha senso o no?

  • [cancellato]

simonebortolin In quando mi sembra che la query PDO prima di essere inviata al DB viene compilata e trasformata in SQL.

Il problema è proprio quello. Una query parametrica per di più "prepared" non deve essere riparsata, l'engine DB l'ha già bella e pronta per l'esecuzione - sono comunque più sono molto più robuste alla SQL Injection - defense in depth, comincia a metterci una barriera in più invece di sperare che la libreria di sanitizzazione degli input scaricata da qualche repository e scritta da un Elboniano nel tempo perso non abbia bug.

Cambiare ogni volta la query non sfrutta questa capacità. Per query "una tantum" cambia poco e può a volte anche essere più efficiente - di solito in ambiente datawarehouse dove il plan è più sensibile ai parametri - ma più spesso in ambiente OLTP è dannoso - e non è che un DB moderno ignora il valore dei parametri - di solito ormai fra le statistiche ha anche la distribuzione dei dati e vede se un parametro è "borderline".

Il problema è che ci sono due modi per usare un database - il primo è il "data dump" - la "discarica dei dati" dove lo usi in pratica solo come storage, il secondo è usarlo come un rdbMS - con l'accento su Management System - dove sftutti le capacità del sistema di elaborare in proprio - e di solito in maniera molto efficiente purché usati come richiesto - molto meno portabile, ma spesso molto più efficiente - in particolare se usi database che hanno capacità elevate di elaborazione.

Parlo di database relazionali perché se parliamo di SQL escludo altri tipi.

    • [cancellato]

    Technetium Si è stra superato a livello enterprise poi certo se fai siti in drupal per i negozietti di quartiere è ancora la scelta migliore forse, come detto è una tecnologia superata ad oggi, ma va ancora bene per alcuni usi.

      • [cancellato]

      simonebortolin Sul fatto che ci siano strumenti come l'Hibernate che sono un ufficio complicazioni delle query sono d'accordo, ma non tutti gli strumenti di generazione query via funzioni/dsl sono così

      Questo lo dice chi non sa programmare ad oggetti e non conosce il paradigma di Hibernate, ovvio che se non lo conosci e pensi ancora a query è ovvio che ti risulti complicato.
      Poi come sempre tutte le tecnologie hanno i pro e i contro come per tutto.

        • [cancellato]

        • Modificato

        simonebortolin Inoltre il query planner non dovrebbe essere sensibile ai parametri,

        Non lo è infatti, ma al testo scritto sì.
        E se il linguaggio traduce SELECT * FROM prezzi WHERE item = "mela"; e SELECT * FROM prezzi WHERE item = "pera"; in due stringhe diverse invece che (SELECT * FROM prezzi WHERE item = ?;, "mela") e (SELECT * FROM prezzi WHERE item = ?;, "pera") , per il query planner sono due query diverse, e deve ricominciare l'analisi. Magari si ferma ad estrarre i literali e a renderla internamente pseudo-parametrica, ma è sempre lavoro in più che deve fare quando può comparare un hash di una stringa e accorgersi che, toh, ce l'ho già.

        simonebortolin l'input deve essere sempre filtrato a priori.

        Non ho mai detto che non si debba fare o che servano a questo però 😉

        [cancellato] Conosco flotte di DBA (sic!) strenui sostenitori de "la coerenza relazionale deve essere garantita dall'applicazione" e che non mettono foreign key perché gli ostacolano i backup/restore (non hanno capito che basta sospenderle o eliminarle e ricrearle, in caso estremo...) e il loro modo di creare gli oggetti (per certa gente per dire è """normale""" che esistano prima le righe fattura della testata)... poi si chiedono perché sono sempre nervoso...

          simonebortolin Io avevo letto che in PDO c'era un ambiente virtuale di test delle query che fa da compilazione e sanificazione, però se è così meglio.

          si tratta del flag: PDO::ATTR_EMULATE_PREPARES

          Apprendo dal web, che mentre per MySQL l'emulazione è attiva di default per motivi di compatibilità con vecchie versioni di MySQL, con DBMS più "avanzati" come Postgresql è disattiva di default

            [cancellato] però in ambito datawarehouse non ci dovrebbe essere bisogno di filtrare le query o sbaglio? Non ci dovrebbe essere input dell'utente malefico, e quindi in quel caso query preparate hanno senso, inoltre non credo neanche che si usi PHP in ambito DW.

            [cancellato] Premetto che di Hibernate ho solo visto codice scritto da altri per vari motivi non ho mai approfondito più di tanto, ma essendo un ORM come tanti altri più o meno complessi (da Android Room, Realm (però questo usa un paradigma abbastanza relazionale con un db non relazionale), ET- LINQ, jOOQ, ...) ho notato l'overload di codice spesso inutile dovuto oltre alla non conoscenza dell'architettura della libreria di ORM al linguaggio di programmazione.

            [cancellato] Non lo è infatti, ma al testo scritto sì.
            E se il linguaggio traduce SELECT * FROM prezzi WHERE item = "mela"; e SELECT * FROM prezzi WHERE item = "pera"; in due stringhe diverse invece che (SELECT * FROM prezzi WHERE item = ?;, "mela") e (SELECT * FROM prezzi WHERE item = ?;, "pera") , per il query planner sono due query diverse, e deve ricominciare l'analisi. Magari si ferma ad estrarre i literali e a renderla internamente pseudo-parametrica, ma è sempre lavoro in più che deve fare quando può comparare un hash di una stringa e accorgersi che, toh, ce l'ho già.

            Si se viene mandato in SQL il ? sono d'accordo al 100% sulla maggiore efficienza (è evidente), ma la mia conoscenza sulle query, dovuta a varie influenze sul fatto di ridurre al minimo i Prepared statement (e la cosa bella che sento spesso parlare di questo da tante persone, anche autorevoli) in quanto a loro dire "sono una complicazioni affari semplici " (e si che lo trovi pure su alcuni libri di testo...) mi ha limitato le mie doti di investigatore mi ha fatto pensare veniva elaborata lato applicazione la query tramite l'ambiente virtuale appena citato da handymenny, d'altronde è sempre possibile fare un print della query buildata.

            [cancellato] Non ho mai detto che non si debba fare o che servano a questo però 😉

            Il mio era un: è meglio sanificare una volta e darlo in pasto ad una query nuova che filtrare e poi usare i prepared statement, ma sono d'accordo sul fatto che ci sono motivi per usarlo.

            [cancellato] Conosco flotte di DBA (sic!) strenui sostenitori de "la coerenza relazionale deve essere garantita dall'applicazione" e che non mettono foreign key perché gli ostacolano i backup/restore (non hanno capito che basta sospenderle o eliminarle e ricrearle, in caso estremo...) e il loro modo di creare gli oggetti (per certa gente per dire è """normale""" che esistano prima le righe fattura della testata)... poi si chiedono perché sono sempre nervoso...

            Questo è il minimo dei DBA. Nessun DBA è in pace con i charset per esempio....

            Chiedo al moderatore se il testo scritto (con ovviamente riferimenti a commenti ed annotazioni) sul forum lo posso riutilizzare su un blog personale e/o in altri posti (tipo appunti, ovviamente senza scopo di lucro) in quanto è una bella discussione, soprattutto la parte su PDO.

              [cancellato]
              Quando ha raggiunto un "livello enterprise" e quando è stato superato ?

              Per me, alla fine conta quello che ci devi fare.
              Ogni linguaggio ha le sue peculiarità che lo rendono più o meno adatto per raggiungere uno scopo.. ma non è che venga limitato da questo.
              Buona parte dei backend è misto in diversi linguaggi. Diverse volte ho visto combinazioni di php, python o php e nodeJS a seconda del compito da svolgere.

                per il web il trend che vedo: webassembly (ottenuto da un altro linguaggio come rust ecc) + html +js,
                jamstack (come architettura), graphql (data retrival) , rest( data input), database (il tipo giusto per lo scopo, KV, RDMS, Graph, Time Series ecc..)
                Bisogna ricordarsi che: "Se il tuo unico strumento è un martello, tendi a trattare ogni problema come se fosse un chiodo"

                Detto questo PHP è sempre stato un mediocre (=un hack e non ingegnerizzato) linguaggio di programmazione.

                  simonebortolin Chiedo al moderatore se il testo scritto (con ovviamente riferimenti a commenti ed annotazioni) sul forum lo posso riutilizzare su un blog personale e/o in altri posti (tipo appunti, ovviamente senza scopo di lucro) in quanto è una bella discussione, soprattutto la parte su PDO.

                  @matteocontrini

                    • [cancellato]

                    simonebortolin però in ambito datawarehouse non ci dovrebbe essere bisogno di filtrare le query o sbaglio?

                    La sicurezza la fai dappertutto. È ovvio che un sito accessibile pubblicamente o dalla maggior parte del personale di un'azienda è più a rischio, ma un'applicazione vulnerabile mette a repentaglio sia la sicurezza dei suoi dati sia quella del resto della rete. L'input malefico può arrivare da dove meno te lo aspetti 😀

                    In un datawarehouse le query preparate in realtà hanno meno senso perché ci sono query meno frequenti che richiedono molto tempo per essere completate - e magari anche il DB è costruito ad hoc per certi tipi di interrogazione.

                    Quindi il tempo di parsing e ottimizzazione della query è molto inferiore al tempo di elaborazione, e trovare il plan ottimale per ridurre al massimo i tempi può essere più importante, anche se ci mette un po' di più. Dove il tempo di parsing e quello di ottimizzazione diventano comparabili al tempo di esecuzione (e le query sono molto frequenti) è dove vuoi che siano riusate il più spesso possibile. I DB sono spesso anche in grado di individuare query "simili" - dipende da quanto cambiano, ma di solito c'è una cache, se a furia di inviare query sempre diverse i dati in cache non ci sono più le prestazioni decadono.

                    Come usi un DB SQL è ortogonale al linguaggio di programmazione - le query sono le stesse che l'applicazione sia in C o in PHP.

                      • [cancellato]

                      juststupid + html

                      No, adesso vogliono usare il Canvas direttamente perchè HTML è lento e non permette di avere sufficiente libertà. In pratica tentano di imitare le applicazioni native.

                      Webassembly serve esattamente togliere di mezzo Javascript

                      juststupid (=un hack e non ingegnerizzato) linguaggio di programmazione.

                      Stendiamo un velo pietoso su molti ultimi linguaggi inventati a casaccio da chi faceva meglio a darsi all'ippica. Non molto diversi da PHP, alla fine. Troppa roba pensata per risolvere il problema del momento senza alcuna visione globale e in avanti.

                        juststupid Detto questo PHP è sempre stato un mediocre (=un hack e non ingegnerizzato) linguaggio di programmazione.

                        Che bella definizione.

                        [cancellato] No, adesso vogliono usare il Canvas direttamente perchè HTML è lento e non permette di avere sufficiente libertà. In pratica tentano di imitare le applicazioni native.

                        Ho sentito, ho parecchi dubbi sull'accessibilità sinceramente.

                        [cancellato] In un datawarehouse le query preparate in realtà hanno meno senso perché ci sono query meno frequenti che richiedono molto tempo per essere completate - e magari anche il DB è costruito ad hoc per certi tipi di interrogazione.

                        Ecco io pensavo il contrario

                        Technetium Buona parte dei backend è misto in diversi linguaggi. Diverse volte ho visto combinazioni di php, python o php e nodeJS a seconda del compito da svolgere.

                        Si basata su architettura a microservizi e altre cose del genere.

                          • [cancellato]

                          simonebortolin Ecco io pensavo il contrario

                          Beh no ha senso... va ottimizzato quel che ti può dare un "ritorno d'investimento", inutile ottimizzare (pesantemente) e riutilizzare una query manuale o estemporanea che vai a lanciare una volta al giorno, anche se impiega quella frazione di punto percentuale di tempo in più pace e bene.
                          Diverso è invece andare a riusare il planning di una query che esegui decine o centinaia di volte al minuto, lì salvare millesimi di secondo a fine giornata ti porti a casa svariati minuti di tempo CPU risparmiato.

                          [cancellato] No, adesso vogliono usare il Canvas direttamente perchè HTML è lento e non permette di avere sufficiente libertà. In pratica tentano di imitare le applicazioni native.

                          Tranquillo, tra 5 anni chiuderanno il cerchio e torneranno a creare le applicazioni native perché saranno "la novità" e "ultraveloci".
                          Ridiamoci sopra valà...

                          Avendo usato PHP per un breve periodo, ritengo che rimarrà per sempre un linguaggio "legacy" come ne ha parlato molto l'OP.
                          L'avvento delle nuove tecnologie per web ha ucciso molto lo scripting ibrido HTML/PHP, ma di certo ad oggi ci sono ancora parecchi siti web che semplicemente non hanno intenzione di spostarsi dal codice che si è creato.
                          Quello che si sta facendo con le ultime versioni di PHP (vedi 8.0) è cercare di correggere tutte le incoerenze che sono rimaste per anni, ma di certo non potranno spostarsi molto per il discorso di prima.

                          Ha senso quindi usare PHP nel 2021? L'unico motivo per cui lo andrei a utilizzare, è se dovessi necessariamente utilizzare un codebase esistente di parecchi anni fa, altrimenti migrerei subito a soluzioni più "moderne", anche a costo di dover riscrivere tutto.

                            simonebortolin no puoi fare if(isset($_POST))

                            Sono piuttosto sicuro che in $_SERVER ci sia il metodo della richiesta
                            Edit: te l’hanno già detto.
                            Ma per me i problemi del PHP sono altri, ad esempio che se cerchi di accedere a delle chiavi inesistenti da solo un warning, la comparazione non è strict di default,…
                            La versione 8 è un po’ meglio

                              eutampieri Si si so di $_SERVER, ma in realtà ho avuto problemi a prendere alcuni dati da lì... e comunque non è neanche bello come viene fatto in php

                              Per la compilazione non strict si ogni tanto da fastidio.... Ma non lo reputo il problema principale

                              dadadani
                              Quindi a che linguaggio ti daresti adesso per lo sviluppo web ?
                              Quali sono le soluzioni più moderne ?

                                il vero problema è che ormai non ha più senso essere full stack

                                  dadadani riscrivere tutto dipende da quanto sia il tutto.... C'è chi (pochi ma grossi) continua a usare motori applicativi in cobol per non riscrivere tutto, vedi te...

                                    Informativa privacy - Informativa cookie - Termini e condizioni - Regolamento - Disclaimer - 🏳️‍🌈
                                    P.I. IT16712091004 - info@fibraclick.it

                                    ♻️ Il server di questo sito è alimentato al 100% con energia rinnovabile