PHP mysql PDO отказывается устанавливать значение NULL

Я не могу установить поле с нулевым значением со значением по умолчанию от нуля до нуля, используя mysql pdo. Я могу сделать это, используя прямой sql.

Я пробовал: (в основном из этого вопроса Как вставить значения NULL с помощью PDO?)

  • Null Int

    bindValue(':param', null, PDO::PARAM_INT);
    
  • Null Null

    bindValue(':param', null, PDO::PARAM_NULL);
    
  • 'Null', Int

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

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

    bindValue(':param', null);
    
  • 'Null'

    bindValue(':param', 'NULL');
    
  • и bindParam аналоги из 5 и 6 с переменной, которая удерживала значение привязки.

Все, начиная с PDO, приводит к тому, что значение установлено на 0.

Версия PHP: PHP 5.3.2-1ubuntu4.10

ВЕРСИЯ СЕРВЕРА MYSQL: 5.1.63-0ubuntu0.10.04.1

ИЗМЕНИТЬ Снимок экрана с информацией о колонке

Picture

Ответ 1

Для меня работает следующее:

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

Перейдите в PHP null, с типом PDO::PARAM_NULL. Кроме того, убедитесь, что для вашей эмуляции подготовки установлено значение false. Это может помочь.

Ответ 2

Я настоятельно рекомендую сначала назначить все параметры для переменных, а затем передать эти переменные методу bindParam().

Вы можете назначить, передав NULL этим переменным, и он будет работать нормально.

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

Весь путь из Пакистана:)