Php 为什么PDO要求字段不为null以及如何打破该规则?

Php 为什么PDO要求字段不为null以及如何打破该规则?,php,mysql,pdo,Php,Mysql,Pdo,我正在使用PDO准备的语句,显然有些字段有时可能没有填充,所以我得到了一个完整性约束冲突错误,如何使PDO不查找空字段,而是将字段按原样放在db上 注意,它们甚至是文本类型。在执行前循环它们并删除空字段: $fields = array(id=>3, name=>NULL, phone=>555-5555) $attrinutes = array(); foreach ($fields as $field => $value) { if(isset($value)

我正在使用PDO准备的语句,显然有些字段有时可能没有填充,所以我得到了一个完整性约束冲突错误,如何使PDO不查找空字段,而是将字段按原样放在db上


注意,它们甚至是文本类型。

在执行前循环它们并删除空字段:

$fields = array(id=>3, name=>NULL, phone=>555-5555)
$attrinutes = array();

foreach ($fields as $field => $value) {
   if(isset($value)){
      $attributes[$field] = $value;
   }
}


$keys = array_keys($attributes);
$values = array_values($attributes);

$sql = "INSERT INTO ". static::$table_name ."(";
$sql .= implode(", ", $keys );
$sql .= ") VALUES (";
$sql .= implode( ", ", array_fill(0, count($attributes) ,'?' ) );
$sql .= ")";

$q = $this->connection->prepare($sql);
$q->execute($values);

*** NOT TESTED ***

还要确保在数据库中将字段设置为NULL

我已经设法避免使用PHP好几年了,所以我对PDO不太了解,但是“完整性约束冲突错误”听起来像是数据库的要求,而不是PDO的要求。但是为什么在使用原始mysql函数时它会起作用呢?可能的重复: