PHP e Mysql -> Stallo del Database

Luca Chieppa

Nuovo Utente
3 Nov 2012
3
0
0
37
Buonasera, sto sviluppando un sito web che fa uso massiccio di Ajax con PHP che legge dal database e invia la struttura dei file in xml.
Un utente del mio sito, usando una vecchia versione di safari, quando naviga crea un rallentamento di comunicazione con il database.

Praticamente quando smette di navigare, dopo pochi minuti tutto torna a funzionare velocemente, ma quando lui è sul sito, le richieste javascript ci mettono anche 30 secondi per essere portate a termine, e accedere al database mysql da parte mia ci mette tempi biblici.

L'idea che mi sono fatto (ma è pura supposizione perché non sono granché esperto) è che quando chiama i file php per generare l'xml, questi vadano in errore oppure vanno in stallo sulla richiesta SQL, e le richieste al database si saturano.

Avete qualche altra idea?
Grazie in anticipo

Il mio codice php ha questa struttura:

PHP:
require 'config.php'; 
 
session_start();

//Inizializzo il documento XML
$testata = <<< codeString
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
codeString;
header('Content-Type: text/xml');
echo $testata;

//Inizializzo le stringhe dei messaggi
$codiceXml = "";
$codiceErrore ="";
$is_error=false;

// Creo l'oggetto mydb
$mydb = new mysqli($db_server, $db_user, $db_password, $db_name); 

// Se non è possibile connettersi genero un xml di errore
if (mysqli_connect_errno()) {
    $codiceErrore.="<errore>";
    $codiceErrore.="<messaggio>".htmlentities("Errore di connessione: il database non &egrave; disponibile, riprovare pi&ugrave; tardi")."</messaggio>";
    $codiceErrore.="</errore>";
    $codiceErrore.="</response>";
    echo $codiceErrore;
    exit();
}

// Se non è presente il parametro get, genero xml di errore
if(!isset($_GET['cat'])){
    $codiceErrore.="<errore>";
    $codiceErrore.= "<messaggio>Errore: la categoria selezionata non esiste, contattare l'amministratore</messaggio>";
    $codiceErrore.="</errore>";
    $codiceErrore.="</response>";
    echo $codiceErrore;
    $mydb->close();
    exit();
}
    
$id_cat = $_GET['cat'];
$sql_categoria = "SELECT * FROM categorie WHERE id_categoria=$id_cat";
$sql_prodotti="SELECT * FROM prodotti WHERE id_categoria=$id_cat";
    
$result = $mydb->query($sql_categoria);


if(!isset($result)||is_null($result)||!is_object($result)){
   $codiceErrore.="<errore>";
   $codiceErrore.="<messaggio>".htmlentities("Errore nel database: query sql_categoria non riuscita, contatare l'amministratore")."</messaggio>";
   $codiceErrore.="</errore>";
   echo $codiceErrore;
   $codiceErrore = "";
   $is_error = true;
}else{
    $result = $result->fetch_assoc();
   $codiceXml.="<categoria>";
   $codiceXml.="<nome>".$result['nome']."</nome>";
   $codiceXml.="<descrizione>".htmlentities($result['descrizione'])."</descrizione>";
   $codiceXml.="<immagine>".$result['immagine']."</immagine>";
   $codiceXml.="<colore1>".$result['colore1']."</colore1>";
   $codiceXml.="<colore2>".$result['colore2']."</colore2>";
   $codiceXml.="</categoria>";
}

if(isset($_SESSION['livello'])|| !empty($_SESSION['livello'])){
    if($_SESSION['livello']!= 1){
         $codiceXml.="<livello>2</livello>";
    }
    else{
        $codiceXml.="<livello>1</livello>";
    }
}
else{
    $codiceXml.="<livello>1</livello>";
}

$result = $mydb->query($sql_prodotti);

// Se il risultato non è valido genero un messaggio di errore
if(!isset($result)||is_null($result)||!is_object($result)){
   $codiceErrore.="<errore>";
   $codiceErrore.="<messaggio>".htmlentities("Errore nel database: query sql_prodotti non riuscita, contatare l'amministratore")."</messaggio>";
   $codiceErrore.="</errore>";
   echo $codiceErrore;
   $codiceErrore = "";
   $is_error = true;
}else{
    while($row = $result->fetch_assoc()){
       // Genero un xml con tutti i dati del prodotto
       $codiceXml.="<prodotto>";
       $codiceXml.="<id_prodotto>".$row['id_prodotto']."</id_prodotto>";
       $codiceXml.="<titolo>".htmlentities($row['titolo'])."</titolo>";
       $codiceXml.="<sottotitolo>".htmlentities($row['sottotitolo'])."</sottotitolo>";
       $codiceXml.="<descrizione>".htmlentities($row['descrizione'])."</descrizione>";
       $codiceXml.="<immagine>".$row['immagine']."</immagine>";
       $codiceXml.="<colore1>".$row['colore1']."</colore1>";
       $codiceXml.="<colore2>".$row['colore2']."</colore2>";
       $codiceXml.="<q_riv>".$row['q_riv']."</q_riv>";
       $codiceXml.="<q_cab>".$row['q_cab']."</q_cab>";
       
       if(isset($_SESSION['livello'])|| !empty($_SESSION['livello'])){
            if($_SESSION['livello']!= 1){
                $codiceXml.="<riv>".$row['prezzo_riv']."</riv>";                
                $codiceXml.="<cab>".$row['prezzo_cab']."</cab>";
                
            }           
       }
       
       $codiceXml.="</prodotto>";
    }
}

// SE NON SONO AVVENUTI ERRORI STAMPO IL CONTENUTO CORRETTO
if(!$is_error){
    echo $codiceXml;
}
    
echo "</response>";

$mydb->close();

?>
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Non ho mai sentito qualcosa del genere.
Ma succede solo quando lo utilizza questo tuo amico con safari?
Se usa altri browser non succede?
 

Luca Chieppa

Nuovo Utente
3 Nov 2012
3
0
0
37
Io ho testato il sito con Firefox, Chrome e IE, quindi il mio sito gestisce bene gli errori con questi 3 browser.

Safari (non aggiornato all'ultima versione), invece da errori strani, ed ho notato rallentamenti quando lo utilizziamo io e lui in contemporanea.
Il sito è hostato su un sito web a basso costo, quindi probabilmente non riesce a gestire troppe connessioni aperte in contemporanea.
Bho!

Se però mi confermate che il mio codice php può andare bene (e non dovrei mettere che ne so un try catch con un finally che chiude il database o settare dei timeout) allora io ho il cuore in pace ;)
 
Discussioni simili
Autore Titolo Forum Risposte Data
P Codifica caratteri speciali mysql php PHP 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
Z MySql injection PHP PHP 1
D problema php mysql PHP 1
D problema php mysql PHP 1
L Google chart php mysql PHP 2
L Aiuto per programma web php/mySQL PHP 2
S Problemi delle funzioni eliminate con PHP e MySQL PHP 4
C Aiuto compiuto scuola PHP/MySQL PHP 2
G Problema caricamento tabelle MySql da PhP PHP 0
L update tabelle in php mysql [risolto] PHP 6
F Passare una variabile php dal DB mysql alla pagina PHP 3
B Fare calcoli con php da tabella mysql PHP 2
D [MySQL] [PHP] SQL andare da capo MySQL 0
P [OFFRO] Realizzazione siti web in PHP/MYSQL, responsive e Ottimizzati SEO Offerte e Richieste di Lavoro e/o Collaborazione 0
Tommy03 Firebase o PHP+Mysql? Sviluppo app per Android 0
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
E Cerco programmatore PHP/Mysql - retribuito Offerte e Richieste di Lavoro e/o Collaborazione 0
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
Z Gestionale in Php/mysql: Quanto farsi pagare? Aiuto! Discussioni Varie 0
E Inserimento dati da PHP in tabella MySQL PHP 5
R radio input php mysql PHP 2
E Caricare dati da DB MySql all'apertura pagina, meglio PHP o Javascript? PHP 1
giusebos [retribuito] Cercasi programmatore PHP/MySql Offerte e Richieste di Lavoro e/o Collaborazione 1
N Apache + MySQL + PHP MacOs Mojave Web Server 0
T PHP+MYSQL: problema con quelle maledette lettere accentate... PHP 5
K [PHP + MYSQL ] Inserimento dati in database da form dinamico PHP 13
M [PHP] Metodo migliore per fare login a un DB Mysql PHP 1
gandalf1959 problema con la codifica caratteri accentati e speciali tra php e mysql PHP 3
webmachine [PHP][MYSQL] Problema con le SELECT PHP 5
V Creare tabella mysql con php non funziona PHP 1
W Area riservata sicura PHP MySQL PHP 12
G php salvare file in campo blob mysql: massimo 4MB PHP 1
xone [Vendo] Gestionale Magazzino PHP-MYSQL Altri Annunci 0
M Stampare con php e mysql PHP 8
P Importazione dati da file xml in db mysql con php PHP 17
xone [Vendo] Script gestionale php-mysql gestione pratiche Altri Annunci 0
D problemi login php 5.6 mysql PHP 1
T PHP+MYSQL: stampare record con numero progressivo PHP 3
F php PDO mysql connessione(select_db) PHP 3
O paginazione php mysql PHP 10
Fede72 Controllo registrazioni PHP Mysql PHP 5
M Aggioranre record in tabella PHP MYSQL PHP 2

Discussioni simili