Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di slyper
    Registrato dal
    Jul 2011
    Messaggi
    61

    PHP e MySql, cade la connessione

    Salve,
    sono alle prese con un rompicapo e, pertanto mi trovo a chiedere l'aiuto prezioso della comunità di questo forum in pratica, devo aggiornare una tabella "uff_49" dopo aver confrontato i dati con quelli di un'altra tabella "uff_46". Il programma funzione correttamente e raggiunge lo scopo se i records della prima tabella sono circa 2000 e quelli della seconda sui 3000 mentre quando devo confrontare i reali 22610 records della prima tabella con i 33259 della seconda tabella il server WEB apache crasha inspiegabilmente e viene evidenziata la seguente scritta "pagina non trovata" . Quali rimedi ho provato a configurare il file php.ini aumentando il tempo di esecuzione degli scripts (max_execution_time = 0 ovvero a infinito) ma nulla di fatto; vi posto il codice
    codice:
    <? 
    session_start();
    $_SESSION['U_UTENTE']=$_SESSION['t'];
    $t=$_SESSION['U_UTENTE'];
    print($t);
    print("<h3><a href=\"inizio1.php\" >Torna al menu' iniziale</a></h3>");
    print("<h3><a href=\"visrec.php\" >Torna alla ricerca records</a></h3>");
    
    ?>
    <html>
    <head>
    		<meta name="author" content="slyper">
    		<link href="conf1.css" rel="stylesheet" type="text/css">
    		<title></title>
    	</head>
    <body>
    
    torna indietro
    
    <?php
    $host='localhost';
    $user='root';
    $password = 'prova';
    $database = 'uff_parifica';
    $db=mysql_connect($host,$user,$password)
    or die("impossibile connettersi al server $host");
    mysql_select_db($database, $db)
    or die("impossibile connettersi al database $database");
    $Id_49=1;
    $cont=0;
    WHILE($Id_49 <= 22610) {
    $query = "select Cognome_49,Nome_49, Datanasc_49 from uff_49 where id_49 = $Id_49";
    $dbResult = mysql_query($query, $db);
    $AffectedRows = mysql_affected_rows($db);
    $row=mysql_fetch_row($dbResult);
    $C_49=$row[0];
    $N_49=$row[1];
    $D_49=$row[2];
    for($Id_46=1;$Id_46 <= 33259;$Id_46++){
    $query1 = "select Scaff_46,Cass_46,Cognome_46,Nome_46,Datanasc_46 from Uff_46 where id_46 = $Id_46";
    $dbResult1= mysql_query($query1, $db);
    $AffectedRows1 = mysql_affected_rows($db);
    $row1=mysql_fetch_row($dbResult1);
    $S_46=$row1[0];
    //print($S_46);
    $CA_46=$row1[1];
    $C_46=$row1[2];
    $N_46=$row1[3];
    $D_46=$row1[4];
    if($C_49 == $C_46 and $N_49 == $N_46 and $D_49 == $D_46){
    $query2="UPDATE uff_49 set Scaff_sec_orig = \"$S_46\" , "." Cass_sec_orig=\"$CA_46\" "." where id_49=$Id_49";
    $dbResult2= mysql_query($query2, $db);
    $AffectedRows2 = mysql_affected_rows($db);
    $cont=$cont + 1;
     break;}
    }
    mysql_free_result($dbResult1);
    $Id_49=$Id_49+1;
    }
    print("OK". "IL NUMERO DI RECORDS PARIFICATO E'" .$cont);
    
    print("
    
    
    ");
    print("<h3><a href=\"inizio1.php\" >Torna al menu' iniziale</a></h3>");
    print("<h3><a href=\"visrec.php\" >Torna alla ricerca records</a></h3>");
    mysql_free_result($dbResult);
    mysql_close($db);
    ?>
     </body>
    </html>
    P.S. utilizzo XAMPP 1.6.8
    Grato di un utile consiglio ringrazio anticipatamente

  2. #2
    scusa ma mi pare che quello che stai facendo sia allucinante!!!!



    a parte che non capisco perché usi un
    Codice PHP:
    WHILE($Id_49 <= 22610) {
    ...
    $Id_49=$Id_49+1;

    anziché
    un
    Codice PHP:
    for ($Id_49=1$Id_49<= 22610; <= 22610++) 
    comunque...
    poi tu fai un ciclo di 22610 passaggi dentro il quale fai una query e poi a apri un altro ciclo di 33259 passaggi dentro il quale fai un'altra query per un totale 751.985.990 query !!!!!!!!!!!!!!!

    e poi hai pure il coraggio di dire:
    il server WEB apache crasha inspiegabilmente


    cioè sarebbe inspiegabile se NON crashasse!!!

    senti io il tuo codice non l'ho letto molto attentamente perché dovresti postarlo come codice PHP cos' si vede la sintassi colorata se no -almeno x me - è troppo faticoso....
    mi sembra di capire che tra utti quelli che sono in uff_49 tu voglia vedere quelli che compaiono anche in uff_46 e in quel caso settare alcuni campi in uff_49
    giusto?

    comunque sia posso dirti che c'è quasi sicuramente un modo di fare quello che vuoi fare direttamente sul db...

    se ci spieghi un attimo qual è il tuo scopo vediamo come si può fare...

  3. #3
    Utente di HTML.it L'avatar di slyper
    Registrato dal
    Jul 2011
    Messaggi
    61
    In informatica se qualcosa funziona correttamente, e cio' lo fa' correttamente per 400 records della prima tabella e 550 della seconda quind se il codice è perfettamente funzionante non vedo perchè non debba esserelo su una gran mole di records semmai, sarà questione di tempo e forse di memoria che non riesce si riesce a swappare successivamente all'impegno intensivo dell'uso delle query che, in teoria avrebbe dovuto risolversi con l'istruzione "mysql_free_result($dbResult)"; e con la modifica al file php.ini.
    . Premesso cio' a meno che non mi date una soluzione provero' a seguire il consiglio di ottenere ciò direttamente sul a DB. Grazie comunque per la collaborazione

  4. #4
    Originariamente inviato da slyper
    In informatica se qualcosa funziona correttamente, e cio' lo fa' correttamente per 400 records della prima tabella e 550 della seconda quind se il codice è perfettamente funzionante non vedo perchè non debba esserelo su una gran mole di records semmai, sarà questione di tempo e forse di memoria che non riesce si riesce a swappare successivamente all'impegno intensivo dell'uso delle query che, in teoria avrebbe dovuto risolversi con l'istruzione "mysql_free_result($dbResult)"; e con la modifica al file php.ini.
    . Premesso cio' a meno che non mi date una soluzione provero' a seguire il consiglio di ottenere ciò direttamente sul a DB. Grazie comunque per la collaborazione
    Premetto subito che concordo con philbert sul tuo approccio assolutamente allucinante al problema!!!
    Inolte il tuo commento mi fa pensare che di informatica tu non ne capisca molto dato che si tratta di puro vaneggiamento. Il codice che hai scritto è un obbrobrio per 500 record, figuriamoci per qualche decina di migliaia

    Premesso ciò, che mi sembrava d'obbligo, magari una roba del genere, non testata, potrebbe funzionare meglio:

    codice:
    UPDATE uff_46 u46, uff_49 u49 SET u49.Scaff_sec_orig = u46.Scaff_46, u49.Cass_sec_orig = u46.Cass_46 
    WHERE u49.Cognome_49 = u46.Cognome_46 AND u49.Nome_49 = u46.Nome_46 AND u49.Datanasc_49 == u46.Datanasc_46
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it L'avatar di slyper
    Registrato dal
    Jul 2011
    Messaggi
    61
    Satifal, Al di sopra di ogni ipolemica nel merito forse non è stato capito il senso di quello che mi ero proposto ovvero, non se era ottimo o meno il codice scritto ma, bensi' , l'anomalia di quanto rappresentato che nei fatti non siete riusciti a darmi risposta. Comunque ho risolto intervenendo tramite query direttamente sul DB. Ringrazio tutti gli aventi causa e alla prossima

  6. #6
    Originariamente inviato da slyper
    bensi' , l'anomalia di quanto rappresentato che nei fatti non siete riusciti a darmi risposta.
    Non solo ti è stata data una risposta, ma anche una possibile soluzione!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it L'avatar di slyper
    Registrato dal
    Jul 2011
    Messaggi
    61
    E' di questo vi sono grato anche se la query giusta che ho usato e la seguente;
    codice:
    update uff_49 inner join uff_46 set Scaff_sec_orig = Scaff_46, Cass_sec_orig = Cass_46 WHERE Cognome_49 = Cognome_46 and Nome_49 = Nome_46 and Datanasc_49 = Datanasc_46
    Comunque la mia priorità al di là del codice + o - brutto era di capire, ai fini di studio, il motivo per cui il apache crasha e se si poteva trovare un modo per risolvere tale problema.Qualora si trovasse sarei ben felice di imparare qualcosa di nuovo comunque grazie per la collaborazione e buon lavoro

  8. #8
    Originariamente inviato da slyper
    E' di questo vi sono grato anche se la query giusta che ho usato e la seguente;
    codice:
    update uff_49 inner join uff_46 set Scaff_sec_orig = Scaff_46, Cass_sec_orig = Cass_46 WHERE Cognome_49 = Cognome_46 and Nome_49 = Nome_46 and Datanasc_49 = Datanasc_46
    Che è identica a quella che ti ho postato anche se scritta con un differente formalismo.

    P.S.
    Per quanto riguarda il tuo problema iniziale non c'è niente da analizzare...molto semplicemente è da folli (come fatto notare da philbert) effettuare 22.610 x 33.259 = 751.985.990 query. Per cui il problema non sussiste, quel codice, ed i problemi che esso genera, non sono neanche da tenere in considerazione!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.