PHP PDO for mysql を使用して null 非許容フィールドを null 値で更新するときに、エラーまたは例外を生成できません。ストレートSQLを実行すると、予想されるエラーが発生します。
フィールドが null を許可しないことを示す例外またはエラーではなく、 PDO からのすべての値がstatus_idフィールドの値に 0 に設定されます。
$stmt_handler = $this->db_handler->prepare(
"UPDATE faxes SET metadata = :metadata, status_id = :status_id,
created = :created, updated = :updated, content = :content,
vendor_fax_id = :vendor_fax_id WHERE id = :id");
$stmt_handler->bindParam(':id', $fax->id);
$stmt_handler->bindParam(':metadata', $fax->metadata);
$stmt_handler->bindParam(':status_id', $fax->status_id); // tried different combinations
$stmt_handler->bindParam(':created', $fax->created);
$stmt_handler->bindParam(':updated', $fax->updated);
$stmt_handler->bindParam(':content', $fax->content);
$stmt_handler->bindParam(':vendor_fax_id', $fax->vendor_fax_id);
$stmt_handler->execute();
さまざまな組み合わせを試し、PDO::ATTR_EMULATE_PREPARES を false に設定しました (この質問で示唆されているように、PHP mysql PDO は NULL 値の設定を拒否しています) 。
私の元のバインディング:
bindParam(':status_id', $fax->status_id);
で試した
bindValue(':status_id', null, PDO::PARAM_INT);
bindValue(':status_id', null, PDO::PARAM_NULL);
bindValue(':status_id', 'NULL', PDO::PARAM_INT);
bindValue(':status_id', 'NULL', PDO::PARAM_NULL);
bindValue(':status_id', null);
bindValue(':status_id', 'NULL');
PHP バージョン: PHP 5.3.10-1ubuntu3
MySQL サーバーのバージョン: 5.5.28-0ubuntu0.12.10.1
コメントごとに編集
mysql> show columns from faxes;
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| id | char(36) | NO | PRI | NULL | |
| vendor_fax_id | char(36) | YES | UNI | NULL | |
| metadata | varchar(255) | NO | | NULL | |
| status_id | int(10) | NO | MUL | NULL | |
| created | datetime | NO | | NULL | |
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| content | mediumblob | NO | | NULL | |
+---------------+--------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.00 sec)