PHP mysql PDO 拒绝设置 NULL 值

2022-08-30 23:38:54

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

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

  1. 空整型

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

    bindValue(':param', null, PDO::PARAM_NULL);
    
  3. “空”,整型

    bindValue(':param', 'NULL', PDO::PARAM_INT);
    
  4. “空”,空

    bindValue(':param', 'NULL', PDO::PARAM_NULL);
    
  5. bindValue(':param', null);
    
  6. '空'

    bindValue(':param', 'NULL');
    
  7. 以及 5 和 6 的对应项,其中包含一个保存绑定值的变量。bindParam

从 PDO 开始的所有内容都会导致该值设置为 0。

PHP 版本: PHP 5.3.2-1ubuntu4.10

MYSQL SERVER VERSION: 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 的 ,类型为 .此外,请确保将准备模拟设置为 false。这可能会有所帮助。nullPDO::PARAM_NULL


答案 2

我强烈建议首先将所有参数分配给变量,然后将这些变量传递给方法。bindParam()

您可以通过将 NULL 传递给这些变量来赋值,这样可以正常工作。

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

推荐