2011-11-01 25 views
6

quiero insertar un valor NULL en una columna de tabla que contiene el código de área teléfono con las siguientes propiedades:¿Cómo se inserta un valor NULL

mediumint unsigned DEFAULT NULL 

En mi script PHP, tengo esta comprobación a convertir una cadena vacía a un valor 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'"; 

Sin embargo, estoy consiguiendo 0 en lugar de NULL valor. ¿Qué debo hacer para insertar un NULL?

+1

Mejore su función implode (",", $ string). –

+0

¡Ay! A menos que nunca se lance a Internet, probablemente deba leer sobre las vulnerabilidades de inyección de SQL. Sobre el tema: Establezca 'NULL' como una cadena (será un' NULL' normal cuando se ejecute la consulta): '$ _POST ['area_code'] = 'NULL';' – jensgram

+0

related: http: // stackoverflow. com/questions/3700239/mysql-update-statement-for-decimal-fields-to-null-or-empty –

Respuesta

5

Su declaración tiene que parecerse a

UPDATE ... SET area_code = NULL ... 

Si estás lanzando un PHP null a una cadena como lo hace , simplemente lanzará a "", es decir, una cadena vacía. Tendrá que cambiar el valor a "NULL" (la cadena "NULO") en lugar de simplemente NULL (el tipo null). También debe escapar/sanitizar/validar seriamente sus valores antes de conectarlos a una consulta SQL, está abierto para la inyección de SQL.

+0

+1 por mencionar también el riesgo de inyección SQL. – Jacco

+0

Sí, veo tu punto. Lo mismo que mencionó Alain. Apliqué un 'mysqli_real_escape_string' para limpiar mi' POST'. No se muestra todo aquí. :) –

2

Cambio NULL de PHP con MySQL NULL (cadena):

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

No, no funcionó. Todavía '0' –

3

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

NULL siempre se convierte en una cadena vacía.

cuando se genera $string[], puede no sólo concatenar su $value, o sus nulos serán convertidos a cadenas vacías, que convierten de nuevo a cero. Tendrá que hacer una prueba como:

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

No quiero hacer todas las cadenas vacías como valor' NULL'. Pero veo tu punto por qué no funciona. Gracias. –

2

NULL siempre se convierte en una cadena vacía.

Trate

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

porque nulo no es una cadena

1

Inténtelo así:

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

Esto se debe a emitir su NULL de cadena:

$field."=".$value 

Tiene dos alternativas:

  1. Código una excepción para los valores 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. Cambiar a una biblioteca que apoya las declaraciones preparadas (en mi humilde opinión, la solución más simple y más fiable):

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

Para empezar, usted debe estar escapando estos valores publicados (tal vez ya lo son) . En segundo lugar, NULL en PHP siempre se convierte en una cadena vacía (http://php.net/manual/en/language.types.string.php). En su lugar, utilice:

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

que a su vez crear correctamente la cadena:

area_code=NULL 

para su declaración UPDATE.

1

Si el tipo de datos de la columna de la tabla de la base de datos se define como int/float/numeric, toma 0 en lugar de NULL. Porque lo que está haciendo es hacerlo como una cadena que no coincide con la definición de columna que es int/float.

Cuestiones relacionadas