Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    66

    Query funzionante via PHPMyAdmin ma non via PHP

    Ricalcando in buona parte un database per prenotazioni alberghiere come illustrato nella guida di MySQL all'indirizzo http://database.html.it/guide/lezion...ioni-alberghi/ , sto mettendo su gli script in PHP.
    Mi accade che una delle query mi funziona correttamente se la invio tramite PHPMyAdmin, ovvero mi vengono restituiti record, mentre non funziona attraverso lo script in PHP perché trova 0 risultati.
    Di seguito il codice (dalla query in poi):


    Codice PHP:
    $sql "LOCK TABLES camere c READ, prenotazioni p READ, prezzi READ, clienti WRITE, prenotazioni WRITE;"
             
    "SET @inizioPeriodo = '$data_in_numerica';"
             
    "SET @finePeriodo = '$data_out_numerica';"
             
    "SELECT c.* FROM camere c WHERE NOT EXISTS (SELECT * FROM prenotazioni p WHERE p.camera = c.n_camera AND (p.periodoDal < @finePeriodo AND @inizioPeriodo < p.periodoAl));";

    $risultati_mysql mysql_query($sql,$connessione); 
    $num_righe mysql_num_rows($risultati_mysql); 

    if (
    $num_righe==0) {     
            echo 
    "Non ci sono informazioni"

    else {     
            echo 
    "<h2>Camere libere nel periodo selezionato</h2>";
         echo 
    "<table border='1' cellspacing='0' cellpadding='6'>\n";
         echo 
    "<tr><th>Camera n°</th></tr>\n";
         while (
    $riga mysql_fetch_array($risultati_mysql)) {
             
    $n_camera $riga['n_camera'];
             
    # visualizza i risultati
             
    echo "<tr><td>$n_camera<a href=\"index.php?page=booking3&in_giorno=$in_giorno&in_mese=$in_mese&in_anno=$in_anno&out_giorno=$out_giorno&out_mese=$out_mese&out_anno=$out_anno&pers_per_camera=$pers_per_camera&n_camera=$n_camera\">Calcola il prezzo</a></td></tr>\n";
         }
         echo 
    "</table>";
    }  

    mysql_free_result($risultati_mysql);  
    mysql_close($connessione); 

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    209
    ma quella non è una query sola!
    mysql_query ti permette di eseguire una sola query per volta, dividi quel $sql in $sql1,$sql2 etc ed esegui altrettante volte mysql_query();

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    66
    Questa è per l'appunto una cosa che non sono riuscito a capire nonostante le guide lette, ovvero: quando ci sono più istruzioni (query) da inviare durante uno stesso script in PHP, devo inviarle ognuna tramite un'esecuzione di mysql_query() ?
    Dalle prove che avevo fatto tramite la finestra MySQL di PHPMyAdmin, avevo dedotto invece che dovessi inviarle tutte insieme tramite una sola chiamata di mysql_query(): inviandole una per volta mi accadeva infatti che le variabili @inizioPeriodo e @finePeriodo si "svuotavano" tra un'istruzione e l'altra, mentre se le inviavo tutte in un colpo solo il tutto funzionava. In cosa sto sbagliando?
    Inoltre: se le devo inviare tramite mysql_query() separate, devo fare qualcosa tipo quel che segue?


    Codice PHP:
    $sql1 = ... 
    $sql2 = ... 
    $sql3 = ...  

    mysql_query($sql1,$connessione); 
    mysql_query($sql2,$connessione); 
    $risultati_mysql mysql_query($sql3,$connessione);  

    $num_righe mysql_num_rows($risultati_mysql);  

    if (
    $num_righe==0) {
                  echo 
    "Non ci sono informazioni"

    else {
                 
    # istruzioni per estrarre i record ricavati dalla query $sql3 

    .... 
    L'assegnazione ad una variabile $risultati_mysql per estrarre i record ricavati la devo fare solo all'ultima query?
    Grazie

  4. #4
    Originariamente inviato da Andreau
    Questa è per l'appunto una cosa che non sono riuscito a capire nonostante le guide lette, ovvero: quando ci sono più istruzioni (query) da inviare durante uno stesso script in PHP, devo inviarle ognuna tramite un'esecuzione di mysql_query() ?
    Dalle prove che avevo fatto tramite la finestra MySQL di PHPMyAdmin, avevo dedotto invece che dovessi inviarle tutte insieme tramite una sola chiamata di mysql_query(): inviandole una per volta mi accadeva infatti che le variabili @inizioPeriodo e @finePeriodo si "svuotavano" tra un'istruzione e l'altra, mentre se le inviavo tutte in un colpo solo il tutto funzionava. In cosa sto sbagliando?
    phpmyadmin e' uno script php. Non e' che esegui una sola query, ne esegui tante quanti sono i ; che chiudono le stringhe SQL. Siccome e' uno script php questo significa che se metti una istruzione per volta nella finestra delle query verra' effettuata per ogni istruzione la connessione a mysql, l'esecuzione della query, l'uscita dallo script con conseguente disconnessione da mysql e cancellazione del buffer relativo. E cosi' le istruzioni sono praticamente singole e le query successive non possono trovare i dati a loro necessari.

    Mettendo TUTTE le query nella stessa finestra ottieni di eseguire tutte le istruzioni utilizzando la stessa connessione trovando cosi' le variabili e quant'altro di temporaneo eseguito.

    Quindi nel tuo script php devi eseguire tante query quante sono le istruzioni/comandi SQL. Esattamente come fa (trasparente allo user) phpmyadmin.

    meglio pero' se utilizzi la segnalazione degli errori mysql_error() almeno durante la fase di debug.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    66
    Ok, grazie, molto chiaro.

    Con uno degli script in questione, quello che calcola il prezzo andandolo ad assegnare ad una variabile @prezzoTotale, mi accade però che non riesco a recuperare il valore di questa variabile per stamparlo poi a video, bensì mi viene stampato il testo @prezzoTotale.
    Le query in sequenza sono queste:

    Codice PHP:
    $sql1 "SET @inizioPeriodo = '$data_in_numerica'";
    $sql2 "SET @finePeriodo = '$data_out_numerica'";
    $sql3 "SELECT prezzo(@inizioPeriodo,@finePeriodo,'$pers_per_camera') INTO @prezzoTotale";
    $sql4 "SELECT @prezzoTotale";

    $risultati_mysql mysql_query($sql4,$connessione);
    echo 
    mysql_errno() . ": " mysql_error(). "\n";
    $num_righe mysql_num_rows($risultati_mysql);

    if (
    $num_righe==0) {
        echo 
    "Non ci sono informazioni";
    }
    else {
        echo 
    "

    Prezzo totale per la camera n° " 
    $_REQUEST['n_camera'] . " nel periodo selezionato: ";
        while (
    $riga mysql_fetch_array($risultati_mysql)) {
            
    $prezzoTotale $riga['@prezzoTotale'];
            echo 
    "@prezzoTotale</p>";
        }

    Quando alla fine faccio echo "@prezzoTotale</p>", viene visualizzato il testo @prezzoTotale invece che il suo valore, mentre, facendolo tramite PHPMyAdmin, vedo una tabellina con una colonna e una riga, la cui colonna si chiama @prezzoTotale e contiene il prezzo calcolato. Quindi sto sbagliando nel recupero del valore della variabile @prezzoTotale con la query $sql4, come si fa?
    Grazie

  6. #6
    non capisco tutto quel giro del fumo che fai.

    Hai delle variabili in php perche' non usi quelle? Anyway ... ammesso che quello che fai abbia un senso prepari 4 query e ne esegui una sola

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    66
    Quello che sto facendo è un'applicazione sulla falsariga di quanto descritto nel tutorial su prenotazioni albergiere presente nella guida di mysql (http://database.html.it/guide/lezion...ioni-alberghi/). E' però la prima mia applicazione con mysql, quindi è ben possibile che stia facendo degli errori banali.
    In questo tutorial (che riporta solo il codice mysql, senza occuparsi di un'eventale applicazione tramite PHP), a un certo punto ci sono delle query tipo quelle che ho riportato con quelle variabili di mysql. Secondo te devo, nei miei script in PHP, devo invece usare variabili di PHP? Potresti darmi qualche suggerimento? Grazie per la pazienza.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    66
    Pensando che il problema fosse semplicemente come recuperare il valore della variabile di mysql, ho pensato di creare una nuova discussione, in realtà non è così, comunque a questo punto continuo nella nuova discussione http://forum.html.it/forum/showthrea...readid=1315518 .
    Scusate.

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.