PHP在PDO插入的空数组值中插入mysql NULL

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

我有一个pdo函数,它使用数组向表中添加值。它完美地补充说,我的问题是,如果数组值为空,则必须将其添加为NULL值,而不是数据库中的空白字段。我有一个数组,我用它来创建一个mysql查询。例如阵列

$arr = [
    'table' => [
        'fields' => [
            'id',
            'keyname',
            'lang',
            'value'
        ],
        'values' => [
            '',
            'some key name',
            'some lang',
            'some value'
        ]
    ]
];

我试过以下(只是一个基本的例子)

foreach($array as $a => $v) {

   foreach($v as $p => $r){

      foreach($r as $f){

         $val = NULL;
         $f = trim($f);     

         if (empty($f)) {   
           $stmt->bindParam($f, $val, PDO::PARAM_NULL);             
           echo "empty <br/>";
        }

      }

   }

}

以上对数组中的所有空值都返回true,但是当我运行方法将值插入数据库时​​,它们显示空白字段而不是NULL。我也尝试了array_map功能,它根本不起作用。

这是我写的整个功能:

public function add($array) {

        $result = true;

        foreach($array as $a => $v) {

            // the pdoquery prepares the statement to work as mysql query
            $sql = $this->pdoquery($a, $v);

            $query = "INSERT INTO " . $sql;

            $stmt = $this->db->prepare($query);

            ////this is where I am adding the foreach loops

            $exec = $stmt->execute();

            if(!$exec) $result = false;
        }
        if($result) {
            $id = $this->db->lastInsertId();
            return $id;
        }
        else return false;


    }
php mysql arrays pdo foreach
1个回答
0
投票

当您在DB中插入时,只需提供NULL而不是空字符串''

$arr = [
    'table' => [
        'fields' => [
            'id',
            'keyname',
            'lang',
            'value'
        ],
        'values' => [
            null,
            'some key name',
            'some lang',
            'some value'
        ]
    ]
];

然后它将保留null而不是空字符串。

另请注意,DB中的字段结构必须允许它为NULL,否则会返回field cannot be null的错误

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