Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [PHP - MySQL] Una SELECT mi tronca i dati

    Ho un problema strano su cui sto sbattendo la testa da un po'.

    In locale tutto ok, sul server di produzione c'è una select che dovrebbe leggere degli articoli, ma li tronca a 8192 caratteri di lunghezza (l'articolo in questione è lungo circa 48 KB, niente di trascendentale).

    Su entrambi i server c'è PHP 5.1.4 e MySQL5, uso PDO.

    Ho controllato il max_allowed_packet ma è settato a 1MB su entrambi i server, non so quale altra opzione possa determinare questo comportamento sul server di produzione.

    Qualche suggerimento?

    Grazie.

  2. #2
    Che tipo di dato è? Probabilmente hai usato un tipo di dato che sul server dove lavori ha limitazioni diverse che in locale.

  3. #3

    Re: [PHP - MySQL] Una SELECT mi tronca i dati

    Originariamente inviato da skidx

    Qualche suggerimento?

    Grazie.
    un'occhiata al carattere di escape..... anche se 8192 e' 8 kb..... qual'e' il tipo di campo? text?


    edit: ...PDO...

    prova con una query vulgaris, senza PDO tanto per isolare una possibilita' ....

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

  4. #4
    margherite, il dato è un mediumtext.

    Piero, non ho capito cosa intendi, il testo in questione è stato a sua volta inserito tramite prepared statement (quindi con l'escape corretto degli apici).

    Ho fatto altre prove e sembra proprio un problema di limiti di memoria / buffer o non so che.

    Infatti se estraggo CONCAT(a, b, c) mi taglia il contenuto a 8192 byte (cioè 8 KB esatti), se estraggo solo il campo b lo taglia a 32768 (cioè 32 KB precisi).

    Cosa può limitare l'uscita di questi dati?

  5. #5
    Escluderei gli escape infatti.

    Farei decisamente la prova senza PDO ... per identificare un possibile errore di PDO.

    query prealloc block size
    query alloc blok size

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

  6. #6
    Originariamente inviato da piero.mac
    query prealloc block size
    query alloc blok size
    già guardati, stessa dimensione (8KB) sia in locale che online.

    Provando la query con phpmyadmin online in effetti il dato viene estratto correttamente (il myadmin non credo usi PDO), ma non mi torna comunque, perché uso la stessa versione di PHP con PDO sia in locale che in remoto, quindi se fosse un problema di PDO non dovrebbe presentarsi su entrambi?
    In locale sono su Win e in remoto su Linux, dici che può essere quello?

  7. #7
    Aggiornamento.

    - bestemmioni a caso -

    Allora, se faccio così:
    codice:
    $st = $this->DB->query("SELECT bla bla bla ...");
    $articles = $st->fetchAll(PDO::FETCH_ASSOC);
    header('Content-type: text/plain');
    echo $articles[0]['html_message']."\n\n";
    echo "SIZE: ".strlen($articles[0]['html_message'])."\n----------\n";
    Il contenuto appare troncato e non scrive nemmeno la riga con SIZE.

    Se invece faccio così:
    codice:
    $st = $this->DB->query("SELECT bla bla bla ...");
    $articles = $st->fetchAll(PDO::FETCH_ASSOC);
    header('Content-type: text/plain');
    echo $articles[0]['html_message']."\n\n";
    echo "SIZE: ".strlen($articles[0]['html_message'])."\n----------\n";
    $st = NULL;
    funziona correttamente, il dato viene estratto tutto e scrive correttamente la dimensione.
    Notare la posizione dell'assegnamento a NULL di $st, che viene fatta DOPO aver letto i dati.

    Problema che si presenta, ripeto, solo su Linux.
    Posso dire che è un bel bug di merda?

  8. #8
    Originariamente inviato da skidx
    già guardati, stessa dimensione (8KB) sia in locale che online.

    Provando la query con phpmyadmin online in effetti il dato viene estratto correttamente (il myadmin non credo usi PDO), ma non mi torna comunque, perché uso la stessa versione di PHP con PDO sia in locale che in remoto, quindi se fosse un problema di PDO non dovrebbe presentarsi su entrambi?
    In locale sono su Win e in remoto su Linux, dici che può essere quello?
    phpmyadmin usa le estensioni mysql o mysqli a seconda dell'impostazione.

    Usi le InnoDB o le myIsam? le versioni sono le stesse? esattamente le stesse? altrimenti potrebbe anche esserci un bug.

    provo a dare un'occhiata ai bugs.

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

  9. #9
    risolto una sega

    Se seleziono solo il campo singolo, mettendo quell' $st = NULL dopo, funziona.
    Se seleziono il campo concatenato ad altre stringhe lo taglia, anche se c'è l'$st = NULL.

  10. #10
    Originariamente inviato da skidx
    risolto una sega

    Se seleziono solo il campo singolo, mettendo quell' $st = NULL dopo, funziona.
    Se seleziono il campo concatenato ad altre stringhe lo taglia, anche se c'è l'$st = NULL.
    ma $st ha il resource id ... giusto? non uso PDO, ma presumo di si.

    Il fatto che lo metti a NULL significa cancellare l'identificativo di risorsa. Quindi se ti passa tutto il result set significa che hai un solo risultato (deduco perche' non vedo la query). Se elimini il puntatore e' come se liberassi il buffer e ti scaricasse tutto il contenuto invece di prelevarlo a blocchi di 8Kb. Capisco anche che e' un arrampicarsi sui vetri quello che ho detto.....

    prova anche con fetch() invece di fetchall() ... tanto il record e' uno solo.

    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.