PHP mysql PDO se recusa a definir o valor NULL

Não consigo definir um campo anulável com um valor padrão de nulo para nulo usando mysql pdo. Eu posso fazê-lo usando sql direto.

Eu tentei: (principalmente dessa questão Como inserir valores NULL usando DOP? )

  1. Null Int

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

     bindValue(':param', null, PDO::PARAM_NULL); 
  3. ‘Nulo’, Int

     bindValue(':param', 'NULL', PDO::PARAM_INT); 
  4. ‘Nulo nulo

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

     bindValue(':param', null); 
  6. ‘Nulo’

     bindValue(':param', 'NULL'); 
  7. e as contrapartes bindParam de 5 e 6 com uma variável que manteve o valor da binding.

Tudo a partir do PDO resulta em que o valor seja definido como 0.

Versão PHP: PHP 5.3.2-1ubuntu4.10

VERSÃO 5.1.63-0ubuntu0.10.04.1 MYSQL SERVER: 5.1.63-0ubuntu0.10.04.1

EDITAR Captura de canvas da informação da coluna

Cenário

O seguinte funciona para mim:

 < ?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(); 

Passe no null do PHP, com o tipo de PDO::PARAM_NULL . Além disso, assegure-se de que sua emulação de preparação esteja configurada como falsa. Isso pode ajudar.

Eu recomendarei fortemente para primeiro atribuir todos os parâmetros às variables ​​e depois passar essas variables ​​para o método bindParam ().

Você pode atribuir passando NULL para essas variables ​​e funcionará bem.

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

Todo o caminho do Paquistão 🙂