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

    [sql+php] La select mi restituisce solo la prima riga..

    E' tutta sera che ci sbatto la testa, probabilmente è una sciocchezza ma proprio non capisco dove sta l'errore.

    devo fare una select ed ottenere alcuni valori da un DB remoto.
    trancio di codice:
    $conn = mysql_connect($dbhost,$dbuser,$dbpass)
    or die("Unable to connect with MySQL server.");
    mysql_select_db($dbname,$conn)
    or die("Unable to select $dbname database");
    $sql = "SELECT * FROM video, stack LIMIT 0, 10;";
    $res = mysql_db_query($dbname,$sql,$conn)
    or die( "Error: " . mysql_error() );

    echo mysql_num_rows($res);

    while ( $dati = mysql_fetch_assoc($res) ) {
    $robba=$dati['campo'];

    etc etc.

    }
    mysql_close ($conn);


    E' lo stesso codice che ho usato molte altre volte e non ha mai dato problemi.
    Anche in questo caso funziona. ma ritorna solo la prima "riga" quando invece ne dovrebbe tornare 8.
    Infatti l'echo mysql_num_rows torna 8.
    Qui invece esce subito dopo aver fatto il primo giro di while e mi scrive:
    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in..
    stessa cosa capita se uso mysql_fetch_array().
    Ho provato ad inibile il warning con l'@ davanti a mysql_fetch (@mysql_fetch_assoc($res)) e il messaggio non lo scrive più, ma comunque ritorna ancora solo la prima riga.

    Non so più cosa fare, dov'è che sbaglio?

  2. #2
    perche' sovrascrivi $robba con il while e vedi quindi solo l'ultimo.

    non usare Mysql_db_query che e sconsigliato. oltretutto la scelta del db gia' l'hai fatta con mysql_select_db. usa mysql_query.

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

  3. #3
    fa pure finta che: $robba=$dati['campo'];
    sia invece: echo $dati['campo'];

    non è quello il problema. è che sembra che non riesca a leggere oltre il primo record.

  4. #4
    Originariamente inviato da Polling
    fa pure finta che: $robba=$dati['campo'];
    sia invece: echo $dati['campo'];

    non è quello il problema. è che sembra che non riesca a leggere oltre il primo record.
    io posso fare finta ma il php non lo fa....

    facciamo allora finta che hai messo mysql_close() dentro il ciclo while,,, quadrerebbe il cerchio.

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

  5. #5
    Originariamente inviato da piero.mac
    io posso fare finta ma il php non lo fa....

    facciamo allora finta che hai messo mysql_close() dentro il ciclo while,,, quadrerebbe il cerchio.
    Intendevo che la tua osservazione sarebbe esatta se avessi di fatto salvato delle variabili all'interno del ciclo while e poi le avessi stampate fuori dal ciclo while. In quel caso ovviamente mi sarei ritrovato solo con le variabili corrispondenti all'ultima tupla del DB.
    In questo caso all'interno del ciclo while vengono fatte varie operazioni. le variabili vengono usate solo temporaneamente all'interno di un'istanza del ciclo while per poter essere manipolate e poi stampate con un bell'echo.

    Qui viene stampata solo la prima riga (ed è proprio quella che dovrebbe uscire fuori per prima, provando a ordinare le righe nella query sql con un ORDER BY), ma poi si ferma e non riesco a capire il perchè.

  6. #6
    Originariamente inviato da Polling
    Qui viene stampata solo la prima riga (ed è proprio quella che dovrebbe uscire fuori per prima, provando a ordinare le righe nella query sql con un ORDER BY), ma poi si ferma e non riesco a capire il perchè.
    perche' probabilmente chiudi la connessione nel ciclo while e quindi ti ritorna un errore da mysql_fetch_assoc che trova il riferimento non valido, oppure usi la variabile $res e la sovrascrivi cancellando il resource id# ricevuto dalla query.

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

  7. #7
    Originariamente inviato da piero.mac
    perche' probabilmente chiudi la connessione nel ciclo while e quindi ti ritorna un errore da mysql_fetch_assoc che trova il riferimento non valido, oppure usi la variabile $res e la sovrascrivi cancellando il resource id# ricevuto dalla query.
    Grazie per lo sforzo
    Ma non è nè l'uno nè l'altro.
    La variabile $res non viene mai usata all'interno del while, e ovviamente la chiusura della connessione sta ben fuori dal ciclo while.

  8. #8
    Originariamente inviato da Polling
    Grazie per lo sforzo
    Ma non è nè l'uno nè l'altro.
    La variabile $res non viene mai usata all'interno del while, e ovviamente la chiusura della connessione sta ben fuori dal ciclo while.
    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in..

    se la prima volta il resource id e' valido e la seconda volta non piu' qualcosa e' successo dentro il while. a meno che non ricevi un NULL dalla query visto che fai un JOIN tra due tabelle.....

    vedi tu.... caso mai posta tutto il ciclo while per darci una occhiata o prova la query con phpmyadmin.


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

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.