2011-11-01 17 views
6

voglio inserire un valore NULL in una colonna della tabella che contiene il telefono cellulare il codice zona con le seguenti proprietà:Come posso inserire un valore NULL

mediumint unsigned DEFAULT NULL 

Nel mio script PHP, ho questo controllo per convertire una stringa vuota per un valore NULL:

if($_POST['area_code'] == "") $_POST['area_code'] = NULL; 

// clean POST 

foreach($_POST as $field => $value) 
{ 
$string[] = $field."=".$value; 
} 
$sql = "UPDATE Buyer SET ".implode(", ", $string)." WHERE user='$user'"; 

Tuttavia, sto ottenendo 0 invece di NULL valore. Cosa devo fare per inserire un NULL?

+1

Si prega di migliorare la funzione implode (",", $ stringa). –

+0

Ouch! A meno che non venga mai rilasciato su Internet, probabilmente dovresti leggere le vulnerabilità di SQL injection. Argomento: impostare 'NULL' come stringa (sarà un normale' NULL' quando viene eseguita la query): '$ _POST ['area_code'] = 'NULL';' – jensgram

+0

correlato: http: // stackoverflow. it/questions/3700239/mysql-update-statement-for-decimal-fields-to-null-or-emptiness –

risposta

5

La sua dichiarazione ha bisogno di guardare come

UPDATE ... SET area_code = NULL ... 

Se stai lanciando un PHP null in una stringa come si fa , verrà lanciato su "", ovvero una stringa vuota. Dovrai modificare il valore in "NULL" (la stringa "NULL") anziché solo NULL (il tipo null). Dovresti anche sfuggire/disinfettare/validare i tuoi valori seriamente prima di collegarli a una query SQL, sei completamente aperto per l'iniezione SQL.

+0

+1 per menzionare anche il rischio di iniezione SQL. – Jacco

+0

Sì, vedo il tuo punto. Come quello che ha detto Alain. Ho applicato un 'mysqli_real_escape_string' per pulire il mio' POST'. Non mostrare tutto qui. :) –

2

Change PHP NULL MySQL NULL (stringa):

if($_POST['area_code'] == '') $_POST['area_code'] = 'NULL'; 
+0

No, non ha funzionato. Ancora '0' –

3

Da http://php.net/manual/en/language.types.string.php

NULL viene sempre convertito in una stringa vuota.

quando si genera $string[], non si può semplicemente concatenare tua $value, o il vostro nulli sarà convertito in stringhe vuote, che convertono di nuovo a zero. Dovrai eseguire un test del tipo:

$value == '' ? 'NULL' : $value 
+0

Non voglio rendere tutta la stringa vuota come valore' NULL'. Ma vedo il tuo punto perché non funziona. Grazie. –

2

NULL viene sempre convertito in una stringa vuota.

Prova

if($_POST['area_code'] == "") $_POST['area_code'] = "NULL"; 

perché nulla non è una stringa

1

Prova in questo modo:

if($_POST['area_code'] == "") $_POST['area_code'] = "NULL"; 
1

Questo perché lanci la tua NULL a stringa:

$field."=".$value 

Avete due alternative:

  1. Codice un'eccezione per i valori NULL :

    if(is_null($value)){ 
        $string[] = $field . '=NULL'; 
    }else{ 
        // Please note I've also added proper string escaping 
        $string[] = $field . "='" . mysql_real_escape_string($value) . "'"; 
    } 
    
  2. Passare a una libreria che supporta le istruzioni preparate (IMHO, la soluzione più semplice e più affidabile):

    $string[] = $field . '=?'; 
    $params[] = $value; 
    
1

Per cominciare, si dovrebbe essere fuggendo questi valori iscritti (forse si sono già) . In secondo luogo, NULL in PHP viene sempre convertito in una stringa vuota (http://php.net/manual/en/language.types.string.php). Invece, utilizzare:

$_POST['area_code'] = 'NULL'; 

che poi creare correttamente la stringa:

area_code=NULL 

per il vostro UPDATE dichiarazione.

1

Se il tipo di dati della colonna della tabella del database è definito come int/float/numerico, è necessario 0 anziché NULL. Perché quello che stai facendo è renderlo come una stringa che non corrisponde alla definizione della colonna che era int/float.

Problemi correlati