【问题标题】:PHP insert mysql NULL in empty array value for PDO insertPHP在PDO插入的空数组值中插入mysql NULL
【发布时间】:2019-07-06 02:54:02
【问题描述】:

我有一个 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】:

    当您像这样插入数据库时​​,只需提供NULL 而不是空字符串'':

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

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

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

    【讨论】:

    • 嗨学习者,我已经尝试过了,我的字段允许NULL。它只是将其作为空白字段插入
    • 那么也许你的数据库中有一个默认设置为空字符串?
    猜你喜欢
    • 2021-07-28
    • 2012-10-28
    • 2011-07-16
    • 2016-09-29
    • 2012-08-25
    • 2014-11-24
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多