2012-07-27 27 views
10

No puedo establecer un campo que admite nulos con un valor predeterminado de null para anular utilizando mysql pdo. Puedo hacerlo usando sql directo.PHP mysql PDO se niega a establecer el valor NULL

que he intentado: (en su mayoría de esta pregunta How do I insert NULL values using PDO?)

  1. nulo Int

    bindValue(':param', null, PDO::PARAM_INT); 
    
  2. null

    bindValue(':param', null, PDO::PARAM_NULL); 
    
  3. 'nulo', Int

    bindValue(':param', 'NULL', PDO::PARAM_INT); 
    
  4. 'Null', Null

    bindValue(':param', 'NULL', PDO::PARAM_NULL); 
    
  5. Null

    bindValue(':param', null); 
    
  6. 'Null'

    bindValue(':param', 'NULL'); 
    
  7. y los bindParam homólogos de 5 y 6 con una variable que celebró el valor de la vinculación.

Todo, desde resultados de PDO en el valor que se establece en 0.

PHP Version:PHP 5.3.2-1ubuntu4.10

MYSQL Server versión:5.1.63-0ubuntu0.10.04.1

EDITAR Captura de pantalla de información de la columna

Picture

+0

¿cuál es el tipo de columna? ¿es eso anulable? –

+2

@ DanielA.White, él acaba de decir que puede hacerlo a través de sql directo así que sí, se puede anotar. –

+0

¿puede mostrarnos el resto de su código en lugar de solo sus declaraciones bindValue?Sospecho que si ha probado todas estas opciones y no es un problema con su base de datos real, entonces debe ser un problema con el resto de su código. –

Respuesta

9

las siguientes obras para mí:

<?php 

$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "pass"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$stmt = $pdo->prepare("INSERT INTO `null_test` (`can_be_null`) VALUES (:null)"); 
$stmt->bindValue(":null", null, PDO::PARAM_NULL); 

$stmt->execute(); 

Pass en PHP de null, con el tipo de PDO::PARAM_NULL. Además, asegúrese de que su emulación de preparación esté configurada en falso. Eso podría ayudar.

+6

Esto ... '$ pdo-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, false);' este pequeño tipo aquí fue el truco. @Truth, gracias! Gran captura! – wmarbut

0

Recomiendo encarecidamente asignar primero todos los parámetros a las variables y luego pasar esas variables al método bindParam().

Puede asignar pasando NULL a esas variables y funcionará bien.

$myVar = NULL; 
$conn->bindParam(':param1' , $myVar , PDO::PARAM_STR); 

Todo el camino desde Pakistán :)