it-swarm.dev

Query del database in cui il valore () è un numero

Come sappiamo, tutti i valori definiti in una query del database devono sempre essere sottoposti a escape in Joomla usando $db->quote($value).

Quando si definiscono i numeri come variabile, si userebbe normalmente (int) Per impostarlo come numero intero.

Quindi cosa si farebbe quando si imposta un numero come valore in una clausola where() per una query del database? Lo definiremmo solo come un intero in questo modo:

$id = (int)555;
->where($db->quoteName('id') . ' = ' . $id);

o avremmo solo bisogno di citarlo in questo modo:

$id = 555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));

o faremmo entrambi?

$id = (int)555;
->where($db->quoteName('id') . ' = ' . $db->quote($id));

Qualcuno potrebbe far luce un po 'solo in modo che io sappia per riferimento futuro per favore?

6
Lodder

Bella domanda questa. Sono stato in questa considerazione anche molte volte. Non sono sicuro che ci sia una risposta giusta e anche non sono sicuro che la mia risposta sia totalmente corretta e spiegata chiaramente.

Da quello che ho visto finora, il database comprenderà una query contenente un numero/intero in un'istruzione where e lo confronterà con i suoi set di record, anche se il campo che stiamo confrontando è definito come (INT), (TEXT ), (VARCHAR) o (CHAR), con o senza virgolette.

Tuttavia, in questi casi uno dei punti critici è la coerenza durante l'interrogazione del database con i giusti tipi di dati. Pertanto, quando si verifica un campo INT, la variabile inclusa nella query deve essere sempre trasformata in un numero intero.

In questo modo e passando un numero intero al database, siamo in qualche modo sicuri dei dati che stiamo inviando ... Il database comprenderà ed elaborerà la query.

Dai miei test con questo caso, la mia conclusione generale è che la citazione dell'intero non farà alcuna differenza nei risultati e nell'intera stabilità. (A meno che non ci siano casi specifici a cui non riesco a pensare al momento, in cui la quotazione di un numero intero comporterà risultati diversi o indesiderati). Quindi, sembra che dipenda più dallo stile di codifica e dalla coerenza del codice.

Tenendo presente quanto sopra, sembra che in realtà non sia necessario citare un numero intero.

Sarà interessante indagare su tutto questo nel nucleo di Joomla, vedere ampiamente le loro pratiche, o ancora meglio avere un input da qualcuno con una vasta conoscenza ed esperienza su questo argomento.

3
FFrewin