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

    PHP5-SQLITE problemi con una query UPDATE

    [preambolo]
    solito tentativo rdi programma di contabilità molto semplice....
    [/fine preambolo]

    [FONT=courier new

    [main.php]
    $q1="UPDATE pdc SET Totale_e='0', Totale_u='0' WHERE id > 0";
    GeneraRisultatoQuerry("$q1");

    $q1='SELECT Conto, SUM(Entrata), SUM(Uscita) FROM primanota group by Conto';
    $result2=GeneraRisultatoQuerry("$q1");

    foreach ($result2 as $value2 ){
    $q2= "UPDATE pdc SET Totale_e='$value2[1]', Totale_u='$value2[2]' WHERE Numero ='$value2[0]'";
    echo "
    $q2";

    --> GeneraRisultatoQuerry($q2);

    }

    [/ main.php]


    [function.php]
    function GeneraRisultatoQuerry($query) {
    $query=sanitize($query,'PARANOID');

    global $db_1;

    $apri_db = "sqlite:$db_1";
    $db = new PDO($apri_db);
    $result = $db->query("$query");
    $db = NULL;
    echo "$query - $db_ -
    ";
    return $result;
    }

    [/function.php]
    [/FONT]

    se metto in remark la stringa // GeneraRisultatoQuerry($q2);
    funziona tutto perfettamente.. ovvermo mi stampa a video le query corrette che se passate attraverso phpliteadmin.php funzioano perfettamente e danno i risultati corretti

    quando invece decommento la riga il PC si impalla di brutto,
    viene creato un file DATABES.db-journal

    e non ho nessun ettetto sul database PDC (piano dei conti)


    HELLLPPPPP
    Flavio

  2. #2

    tutto tace....

  3. #3
    ma scusa... per $q2 non fai prima a farne un array usando il [] e poi nella seconda parte chiami riga per riga? o_o così apri una sola chiamata al db per la connessione ed X query?

  4. #4
    oddio...
    a dire il vero non ho capito cosa intendi...!!!



    semplicemente io voglio
    fare le somme delle colonne Dare/Avere in un database Primanota raggruppando i risultati a seconda del codice conto e per fare questo ci mette pochi decimi di secondo.

    avendo questi 3 (e dico 3 anche se il limite imposto dal mio porgramma è oltre i 10.000) risultati, dovrei andare a cambiare la riga corrispondente al conto (ad esempio 01.01 => cassa contanti, 01,10=> banca 1 )

    il problema è che se la prima quesry di azzeramento funziona alla grande,
    la seconda mi produce i risultati sperati....
    la terza che è nel loop FOREACH non mi fa nulla !!!! anzi impalla violentemente il pc

    ho pensato che il sanitize(PARANOID) potesse alterare la query, ed ho provato a disabilitarlo, ma i risultati non cambiano

    ho provato a fare anzichè l'a query a fare un ECHO della stringa echo "$q2 " e il risultato l'ho infilato in phpliteadmin.php ottenendo in pochi attimi quello che mi serviva , ovvero l'update della riga della tabella PDC (piano dei conti)

    la struttura dei PDC è
    id, Numero, Master, Nome,Totale_e, Totale_u

    mentre la struttura di Primanota è
    id, Data, Notula, Descrizione, Conto, C1, C2

    teoricamente dovrei fare l'aggiornamento dei totali, cosi' da avere sotto controllo il titale di cassa e di banca.... piu' attraverso C1 e C2 i partitari (Quote soci, Spese Affitto ecc ecc)
    è un programmma MOLTO semplificato di partita molto semplice per la gestione di una associazione..... (una di quelle vere e non una attività camuffata....)

    grazie per

  5. #5
    $value2 cosa sarebbe?
    se value2 è un array di risposta di sqlite, al posto di foreach hai provato anche ad usare altri sistemi? Non è detto che cambi qualcosa eh... però son solo delle prove

    per q2 cosa intendo?

    tu hai questo codice:

    Codice PHP:
    [/ main.php]


    [function.
    php]
    function 
    GeneraRisultatoQuerry($query) {
    $query=sanitize($query,'PARANOID');

    global 
    $db_1;

    $apri_db "sqlite:$db_1";
    $db = new PDO($apri_db);
    $result $db->query("$query");
    $db NULL;
    echo 
    "$query - $db_ - 
    "
    ;
    return 
    $result
    }

    [/function.
    php
    Se noti, per ogni "chiamata" della funzione apri una connessione al database... forse e dico forse, l'apertura di tante istanze di connessione impalla tutto. Potresti modificare in questo modo logico:

    Controlli di dover fare più di un cambiamento, se devi farne solo uno usi la funzione che hai già. Altrimenti chiami una funzione (la chiamo function GeneraRisultatoQuerry_special($query) dove $query è un array (o vettore))
    Codice PHP:
    function GeneraRisultatoQuerry_special($query) {
    global 
    $db_1;
    $apri_db "sqlite:$db_1";
    $db = new PDO($apri_db);

    for (
    $i 0$i count($query); $i++) {
     
    $query[$i]=sanitize($query,'PARANOID');
     
    $result $db->query("$query[$i]");
     
    //$db = NULL;
     //echo "$query - $db_ - 
    ";
     //return 
    $result
     }

    Non uso sqlite, ho dunque fatto quanto segue:
    Messo 1 apertura di database ed abbiamo ora X query.
    Ho commentato parte del codice poichè non sò cosa fanno, se chiudono il db, etcetera.

  6. #6
    Originariamente inviato da goikiu
    $value2 cosa sarebbe?
    se value2 è un array di risposta di sqlite, al posto di foreach hai provato anche ad usare altri sistemi? Non è detto che cambi qualcosa eh... però son solo delle prove

    Per q2 cosa intendo?
    vermanete non so come funzioni
    $value2 cosi' coem Value1 NON è un array ma un PDO
    NON so come funzioni, sono un pirlo-autodidatta.
    Ho copiato la funzione ed ho visto che nel 99.999% dei casi funziona divinamente...


    tu hai questo codice:

    Codice PHP:
    [/ main.php]


    [function.
    php]
    function 
    GeneraRisultatoQuerry($query) {
    $query=sanitize($query,'PARANOID');

    global 
    $db_1;

    $apri_db "sqlite:$db_1";
    $db = new PDO($apri_db);
    $result $db->query("$query");
    $db NULL;
    echo 
    "$query - $db_ - 
    "
    ;
    return 
    $result
    }

    [/function.
    php
    Se noti, per ogni "chiamata" della funzione apri una connessione al database... forse e dico forse, l'apertura di tante istanze di connessione impalla tutto. Potresti modificare in questo modo logico:

    Controlli di dover fare più di un cambiamento, se devi farne solo uno usi la funzione che hai già. Altrimenti chiami una funzione (la chiamo function GeneraRisultatoQuerry_special($query) dove $query è un array (o vettore))
    Codice PHP:
    function GeneraRisultatoQuerry_special($query) {
    global 
    $db_1;
    $apri_db "sqlite:$db_1";
    $db = new PDO($apri_db);

    for (
    $i 0$i count($query); $i++) {
     
    $query[$i]=sanitize($query,'PARANOID');
     
    $result $db->query("$query[$i]");
     
    //$db = NULL;
     //echo "$query - $db_ - 
    ";
     //return 
    $result
     }

    Non uso sqlite, ho dunque fatto quanto segue:
    Messo 1 apertura di database ed abbiamo ora X query.
    Ho commentato parte del codice poichè non sò cosa fanno, se chiudono il db, etcetera.
    la funzione
    $db = NULL;
    dovrebbe chiudere la connessione a sqllitie aperta con la chiamata
    $db = new PDO($apri_db);
    anche questo, come la funzione di apertura l'ho lurkata da un rubrica telefonica....

    "Speravo" che il risultato del PDO fosse un Array() ma in realtà in un altro post sul forum mi hanno risposto che NON lo è.... e che è una struttura a se stante chiamata appunto PDO....

    se potete aiutarmi.....

    Flavio

  7. #7
    ho trovato questa pagina dove si vede l'uso del PDO

    http://henryranch.net/software/ease-...h-php-and-pdo/

    non è quella che ho usato io per iniziare.. pero' fa vedere i passi salienti delle funzioni , compreso il

    // close the database connection
    $db = NULL;

    Flavio

  8. #8
    Non conosco praticamente sqlite...

    Tuttavia a livello teorico potresti fare una cosa del genere

    1 connessione a db, con scelta db
    N Query a ciclo sul db
    1 chiusura db.

    Edit: Se il database sqlite gira in locale potresti provare ad usare i comandi standard di php per accedervi...

    http://www.php.net/manual/it/function.sqlite-query.php

    poi come prima detto non conosco sqlite quindi non potrei aiutarti ulteriormente temo.

  9. #9
    SqLite con il PDO sono stati integrati dalla versione 4 di pphp se no ricordo male....
    io inizialmnente usavo una libreria che mi creava dei database flat text, poi ho avuto un po' di problemi sulle query complesse ed ho "trovato" questo DB

    Sqlite praticamente gira usando il motore di PHP5 oltre che essere integrabile in qualunque tipo di sorgente (a detta del sito sqlite)

    ho "dovuto" abbandonate MySql perchè era diventato INGESTIBILE...
    le query standard che avevo creato negli anni passati davano tutti errori indecenti ed in locale ci perdevo giorni a capire cosa funzionava e cosa no....
    quindi mi sono dedicato prima alla libreria ChaozzDb (che usa dei flat file) poi come dicevo ho scoperto SqLite che essendo "integrato" in php5 mi dava la certezza di minori falle...


    Sinceramente non sono in grado di riscrivere tutto (sarà qualche decina di pagine per un totale di fose un migliaietto di righe di codice) per usare un0altra forma di "accesso" a SqLite.. sono decisamente arrugginito. e trovata una via non ho tempo o forza per cambiarla.... anceh se ho tentato di astrarre al massimo le funzioni....

    teoricamente in tutto il gestionale è richiamata la funzione GeneraRisultatoQuerry($query)
    per cui poco importa come funziona la query.. l'importante è che la quesry stessa sia "standard sql" ed il risultato sia qualcosa di processabile con l'iterazione FOREACH ()

    forse è meglio che copio il post princiopale sul foorum dbase ?!?!?
    F.

  10. #10
    emm.. scusate...
    io sono ancora alla disperata ricerca di un aiutino......

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.