Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173

    mysqli e select consecutive

    Ciao a tutti.
    Ho un problema con mysqli, precisamente quando tento di eseguire due select consecutivamente.
    Questo il caso.

    Codice PHP:
    <?php 
    $hostname     
    =  "localhost";
    $username     =  "usresempio";
    $password     =  "pswesmpio";
    $dbName     =  "dbesempio";

    $mysqli = new mysqli($hostname$username$password$dbName);
    if (
    mysqli_connect_errno()) {
        die(
    "ERROR: impossibile connettersi. " mysqli_connect_error());
    }
    $mysqli->query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'");

    // [B]PRIMA QUERY[/B]
    $sql "SELECT IDUtente, NomeUtente FROM utenti";

    if (
    $result $mysqli->query($sql)) {
        while (
    $row $result->fetch_assoc()) {
            
    ?>
            

    <?php echo $row['IDUtente']; ?> - <?php echo $row['NomeUtente ']; ?></p>
            <?php
        
    }
    }

    // [B]SECONDA QUERY[/B]
    $sql "SELECT IDTipoAccount, NomeAccount FROM tipiaccount";

    if (
    $result $mysqli->query($sql)) {
        while (
    $row $result->fetch_assoc()) {
            
    ?>
            

    <?php echo $row['IDTipoAccount']; ?> - <?php echo $row['NomeAccount ']; ?></p>
            <?php
        
    }
    }
    ?>
    Questo l'errore:
    --
    Errore Numero: 0 - Errore MySQL: Commands out of sync; you can't run this command now
    Query: SELECT IDTipoAccount, NomeAccount FROM tipiaccount
    #0 {main}
    --

    La prima query la esegue correttamente ed estrai i valori richiesti, la seconda invece no. Se eseguite singolarmente non ho errori e i valori vengono visualizzati. Qual è l'errore?
    Vi ringrazio anticipatamente.

    ;-)

  2. #2
    Prova a liberare il risultato prima di eseguire la seconda query.

    http://it.php.net/manual/it/mysqli-result.free.php

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

  3. #3
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173
    Caspita no. Non funziona. :-(

    Codice PHP:
    <?php
    // PRIMA QUERY
    $sql "SELECT IDUtente, NomeUtente FROM utenti";

    if (
    $result $mysqli->query($sql)) {
        while (
    $row $result->fetch_assoc()) {
            
    ?>
            

    <?php echo $row['IDUtente']; ?> - <?php echo $row['NomeUtente ']; ?></p>
            <?php
        
    }
        
    $result->free();

    ?>
    Ho provato anche: $result->close(); e $result->free_result();. Nulla.
    :-(

  4. #4
    Ma fuori dalla if

    mysqli_free_result($result);

    oppure prova a cambiare sia il nome variabile del resource id sia quello dell'assegnazione del while.

    query 1 $result - $row
    query 2 $result2 - $row2

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

  5. #5
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173
    Nulla. Anche provando le altre soluzioni l'errore persiste e non varia.
    Ho provato persino a cambiare i nomi:

    Codice PHP:
    <?php
    // SECONDA QUERY
    $sql "SELECT IDTipoAccount, NomeAccount FROM tipiaccount";

    if (
    $result2 $mysqli->query($sql)) {
        while (
    $row2 $result2->fetch_assoc()) {
            
    ?>
            

    <?php echo $row2['IDTipoAccount']; ?> - <?php echo $row2['NomeAccount']; ?></p>
            <?php
        
    }
    }
    ?>
    Davvero non capisco.

  6. #6
    avevo visto pure io questo problema ma svariate release fa di mysql. In pratica non puoi eseguire la seconda query se non hai memorizzato oppure svuotato il result set della query precedente.

    prova a seguire le istruzioni del manuale

    http://dev.mysql.com/doc/refman/5.0/...t-of-sync.html

    ma ho sempre risolto svuotando il buffer dell'output del result set con:

    mysqli_free_result($result);

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

  7. #7
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173
    Ciao piero.mac,
    non riesco a cavarne un ragno dal buco. Ho provato lo script su diverse macchine e l'errore è sempre lo stesso. Ad ogni modo grazie per l'aiuto. ;-)

  8. #8
    Originariamente inviato da mjungle
    Ciao piero.mac,
    non riesco a cavarne un ragno dal buco. Ho provato lo script su diverse macchine e l'errore è sempre lo stesso. Ad ogni modo grazie per l'aiuto. ;-)
    hai provato anche con:

    $result->close();

    prima di eseguire la seconda query?

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

  9. #9
    Utente di HTML.it L'avatar di mjungle
    Registrato dal
    Mar 2002
    Messaggi
    173
    'Sta notte ho cercato qua e la per la rete alla ricerca della soluzione al problema.
    Ho scoperto che il problema è figlio di un bug, ma non trovo più il riferimento.

    Ora però devo fare una precisazione. Per praticità di esposizione gli script che ho pubblicato hanno la query in pagina, ma gli script sul quale faccio le prove utilizzano stored procedure.
    Se la query è in pagina il problema è risolvibile (non buggato) aggiungendo semplicemente un mysqli_result::free per liberare la memoria. Ad esempio così:

    Codice PHP:
    <?php
    // PRIMA QUERY
    $sql "SELECT IDUtente, NomeUtente FROM utenti";

    if (
    $result $mysqli->query($sql)) {
        while (
    $row $result->fetch_assoc()) {
            
    ?>
            

    <?php echo $row['IDUtente']; ?> - <?php echo $row['NomeUtente ']; ?></p>
            <?php
        
    }
        
    $result->free();

    ?>
    Se invece si usano le stored si può incorrere nel bug. Questa è una soluzione, ma a me non ha dato comunque risultati.

    Se trovo qualcosa o risolvo pubblico per tutti. Grazie ancora a piero.mac per l'aiuto.
    ;-)

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.