PHP mysql PDO 拒绝设置 NULL 值

问题描述 投票:0回答:3

我无法使用 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 服务器版本:

5.1.63-0ubuntu0.10.04.1

编辑 栏目信息截图

Picture

php mysql pdo
3个回答
18
投票

NULL 值不需要任何特殊处理。只需以通常的方式绑定您的值

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

$stmt->execute();

PDO 将检测空值并将其发送到数据库而不是字符串。

在 WHERE 子句中,您的值可以为 null 或不为 null,请使用 Mysql 的 spaceship 运算符:

$stmt = $sql->prepare("SELECT * FROM table WHERE col <=> :var");
$stmt->bindParam(":var", $nullOrNot);
$statement->execute();

2
投票

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

bindParam()
方法。

您可以通过将 NULL 传递给这些变量来进行分配,它会正常工作。

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

1
投票

如果要将空字符串保存为 null,可以使用如下函数:

function setnull($item){
    if ($item === ""){
        return NULL;
    }else{
        return $item;
    }
}

然后就可以按照通常的方式继续插入了。

© www.soinside.com 2019 - 2024. All rights reserved.