PHP mysql PDO拒绝设置NULL值

wma*_*but 11 php mysql pdo

我无法使用mysql pdo将默认值为null的可空字段设置为null.我可以使用直接sql来做到这一点.

我试过:(主要来自这个问题如何使用PDO插入NULL值?)

  1. Null Int

    bindValue(':param', null, PDO::PARAM_INT);
    
    Run Code Online (Sandbox Code Playgroud)
  2. Null Null

    bindValue(':param', null, PDO::PARAM_NULL);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 'Null',Int

    bindValue(':param', 'NULL', PDO::PARAM_INT);
    
    Run Code Online (Sandbox Code Playgroud)
  4. 'Null',Null

    bindValue(':param', 'NULL', PDO::PARAM_NULL);
    
    Run Code Online (Sandbox Code Playgroud)
  5. 空值

    bindValue(':param', null);
    
    Run Code Online (Sandbox Code Playgroud)
  6. '空值'

    bindValue(':param', 'NULL');
    
    Run Code Online (Sandbox Code Playgroud)
  7. 以及bindParam具有绑定值的变量的5和6 的对应物.

PDO中的所有内容都会将值设置为0.

PHP版本: PHP 5.3.2-1ubuntu4.10

MYSQL服务器版本: 5.1.63-0ubuntu0.10.04.1

编辑 列信息的屏幕截图

图片

Mad*_*iha 9

以下适用于我:

<?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();
Run Code Online (Sandbox Code Playgroud)

传入PHP null,类型为PDO::PARAM_NULL.此外,请确保您的准备模拟设置为false.这可能有所帮助.

  • 这个......`$ pdo-> setAttribute(PDO :: ATTR_EMULATE_PREPARES,false);`这个小家伙就在这里.@Truth,谢谢!伟大的捕获! (6认同)