Quando eseguo una query sql utilizzando i wrapper ZF, tutti i valori numerici restituiscono stringhe. Cosa devo modificare in modo che i valori restituiscano nello stesso tipo di dati come sono nel DB?Recupero di un intero da DB utilizzando Zend Framework restituisce il valore come stringa
risposta
Ho implementato molto del codice Zend_Db
in Zend Framework.
Come altri hanno affermato, il motivo per cui Zend_Db
restituisce stringhe anziché interi o float nativi di PHP è che le estensioni del database di PHP restituiscono stringhe. E la ragione è che potrebbe non esserci un tipo nativo di PHP per rappresentare un determinato tipo di database.
Ad esempio, lo BIGINT
di MySQL è un numero intero con segno a 64 bit. Per impostazione predefinita, il tipo PHP int
è limitato a valori a 32 bit, quindi se si recuperano i dati dal database e si converte implicitamente in int
, alcuni valori potrebbero essere troncati. Esistono molti altri casi simili, per float
e date, ecc.
L'utilizzo della rappresentazione di stringa per tutti i tipi di dati è il modo migliore per rimanere semplici e coerenti, essere sicuri di evitare la perdita di dati ed evitare di scrivere molti fornitori. codice del caso speciale specifico per eseguire la mappatura del tipo di dati. Anche quel codice in più comporterebbe una penalizzazione delle prestazioni.
Quindi, se si dispone di casi specifici in cui è necessario associare i risultati del database ai tipi di dati PHP nativi, è necessario implementarli autonomamente nel codice dell'applicazione (ad esempio in una classe personalizzata Zend_Db_Table_Row
).
I database in genere restituiscono set di risultati sotto forma di testo. A meno che il tuo adattatore db non converta le cose per te (e su suoni come il tuo no), tutti i valori torneranno come stringhe - date, enumerazioni, ecc. Così come i numeri interi.
Se si ha a che fare con un numero limitato di tabelle con solo pochi campi interi, convertirle manualmente. Se hai a che fare con una situazione leggermente più complessa, puoi scorrere le colonne usando le definizioni del database (vedi sqlite_fetch_column_types()
, ecc.). Se la tua situazione è più complessa di quanto sembri ragionevole per queste soluzioni, prendi in considerazione il passaggio a un framework più funzionale.
Sembra che questo sia stato richiesto in passato ma non è stato ancora implementato. #ZF-300 è stato commentato l'ultima volta il 9 gen 09.
Forse potresti condividere il motivo per cui desideri eseguire il typecasting e potremmo aiutarti in un altro modo? PHP è piuttosto clemente quando si tratta di tipi di dati variabili ...
Per un esempio di utilizzo di una consuetudine Zend_Db_Table_Row
per ottenere i tipi di dati corretti, come suggerito Bill Karwin, uno sguardo alla classe qui: http://www.zfsnippets.com/snippets/view/id/70
Può essere implementata nel modello come:
class YourTableName extends Zend_Db_Table_Abstract
{
protected $_name = 'your_table_name';
protected $_rowClass = 'Model_Row_Abstract';
}
È possibile modificare il tipo di dati Model_Row_Abstract
per tinyint
in bool
se lo si utilizza rigorosamente per mantenere valori booleani.
- 1. Recupero di una sola riga da MySQL utilizzando il framework Zend DB
- 2. Hibernate Restituisce il valore intero
- 3. Come ottenere un valore intero da NSDictionary?
- 4. Zend Framework DB esaminare query per un aggiornamento
- 5. ZF2 Zend \ Db Insert/Update utilizzando l'espressione Mysql (Zend \ Db \ Sql \ Expression?)
- 6. Come creare un'API pubblica utilizzando Zend Framework?
- 7. Come estrarre un valore intero da NSRange?
- 8. Come convertire un valore intero in stringa?
- 9. Zend Framework: come fare una selezione DB con più parametri?
- 10. Recupero di un intero sito Web utilizzando Google Cache?
- 11. Zend Framework: dati popolamento DB ad un elemento di Zend modulo discesa
- 12. Ottieni un valore intero univoco dalla stringa
- 13. Zend Framework 2 Connessione DB Microsoft SQL Server 2008
- 14. Zend Framework 2 per un framework Zend Newbie
- 15. Zend Framework più database
- 16. Utilizzo delle tabelle Db Zend Framework senza MVC
- 17. numero di righe interessate Zend DB (UPDATE)
- 18. Nel dizionario, convertendo il valore da stringa a intero
- 19. Zend Framework Twitter OAuth + Token
- 20. Ottenere il valore stringa da un NSArray
- 21. Come utilizzare la libreria Zend senza l'installazione di Zend Framework
- 22. ZF2 \ Zend \ Db \ Sql \ Sql utilizzando predicato nella condizione WHERE
- 23. Come posso generare un intero da un valore letterale stringa in fase di compilazione?
- 24. zend framework 2 AuthenticationService
- 25. ZF2 + Zend \ Db \ Sql \ Update, aggiunta al valore corrente
- 26. come registrare un valore intero con log.d?
- 27. Zend Framework 2 - Cookie Concept
- 28. Selezione stringhe arbitrarie con Zend DB Select?
- 29. Conversione di una stringa in un intero restituisce 2147483647
- 30. Eclipse Zend PDT nasconde todo/tasks/warnings da zend-framework