In PHP, quali sono le differenze tra NULL e l'impostazione di una stringa su uguale a 2 virgolette singole

StackOverflow https://stackoverflow.com/questions/624922

  •  05-07-2019
  •  | 
  •  

Domanda

In passato, quando volevo valori vuoti, impostavo cose del genere.

$blankVar = '';

Poi, dopo alcuni mesi, ho deciso che questo sembrava migliore e aveva un intento più chiaro.

$blankVar = null;

Questo ha funzionato senza intoppi per un po ', ma di recente con un PDO preparato dichiarazioni ho riscontrato un problema. Associare un valore a null ha fatto fallire la query, mentre non è stato vincolato a ''. Avevo bisogno di vincolarlo a null, in modo che se una condizione fosse soddisfatta, avrebbe inserito dati vuoti.

Quali sono le differenze tra i 2? Penso ancora che la compensazione di null (o almeno una costante) sia migliore, quindi dovrei farlo?

define('EMPTY', '');
È stato utile?

Soluzione

Null è solo un altro tipo di dati in PHP, che ha un solo valore (null). Poiché PHP è un linguaggio tipicamente diffuso, può confondere il modo in cui gestisce valori diversi.

" " ;, 0, " 0 " ;, False, array (), Null sono tutti considerati False in PHP.

Null, tuttavia, è un diverso tipo di animale. L'incompatibilità principale con l'utilizzo di Null è che non puoi sapere se èetet ().

$x = false;
isset($x)  ->  true
echo $x    ->  ""

$y = null;
isset($y)  ->  false
echo $y    ->  ""

//$z is not set
isset($z)  ->  false
echo $z    ->  E_NOTICE

Quindi null è strano nel senso che non segue le normali regole variabili in PHP (almeno alcune). Nella maggior parte dei casi, va bene.

Quando si tratta di colonne di database, il NULL di PHP non ha posto lì. Vedete, SQL è un linguaggio basato su stringhe. NULL di SQL deve essere rappresentato da NULL senza virgolette.

Quindi, se vuoi un campo VUOTO, impostalo su " "

INSERT INTO foo SET bar = ""

Ma se vuoi un campo NULL, impostalo su NULL

INSERT INTO foo SET bar = NULL

GRANDE DIFFERENZA.

Ma se provi a inserire direttamente il PHP NULL, aggiungerà zero caratteri alla query (che ti lascia con un errore vuoto o di sintassi, a seconda se lo hai citato).

Altri suggerimenti

null è un valore segnaposto speciale nel linguaggio di programmazione che significa letteralmente "niente". Non è 0, non è una stringa vuota, non è niente. Non vi è alcun valore in memoria che viene indicato. Una stringa vuota, d'altra parte, è ancora un oggetto stringa, solo molto breve :)

Beh, una cosa è bella come appare ogni approccio, ma la differenza principale è che una è una stringa vuota e l'altra è una variabile non inizializzata (null)

A parte le differenze dichiarate da Rex, ci sono due tipi di confronti in PHP, sciolti e rigorosi:

http://www.php.net/manual/en/types .comparisons.php

Se confronti rigorosi o funzioni come is_null () vengono utilizzati a qualsiasi titolo, otterrai risultati diversi. Con paragoni sciolti, tuttavia, PHP è piuttosto indulgente.

Non lo so per certo, ma potresti essere in grado di usare il tuo approccio null, quindi digitare solo quando usi la variabile nel contesto in cui hai avuto problemi (ad esempio pass (stringa) $ blankVar). Se funziona, può significare che sono necessarie meno modifiche al tuo codice.

'null' è l'unica cosa a cui si riferiscono le variabili non inizializzate. È possibile impostare una variabile per fare riferimento a null. C'è anche lo stato 'unset' che significa che la variabile non esiste affatto. Puoi verificarlo tramite la isset () funzione . Molto spesso usato per verificare se esiste un elemento dell'array ed è, ad esempio, un modo per vedere se $ _GET ['op'] ha ricevuto un parametro querystring. Puoi anche rendere unset non variabile (rimuovere un elemento di un array) tramite unset () funzione . Esiste anche una function empty () che controllerà se una variabile è NULL, FALSE, 0 o una stringa vuota

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top