我是一个使用PDO将“NULL”动态插入到数据库中的尝试者。
表结构:
CREATE TABLE IF NOT EXISTS `Fixes` (
`Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK',
`CurrencyId` int(11) NOT NULL COMMENT 'FK',
`MetalId` int(11) NOT NULL COMMENT 'FK',
`FixAM` decimal(10,5) NOT NULL,
`FixPM` decimal(10,5) DEFAULT NULL,
`TimeStamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`Id`),
KEY `CurrencyId` (`CurrencyId`),
KEY `MetalId` (`MetalId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=13 ;
PHP / PDO 查询:
$sql = 'UPDATE
Fixes
SET
FixAM = :fixAM,
FixPM = :fixPM
WHERE
MetalId IN (SELECT Id FROM Metals WHERE Name = :metal) AND
CurrencyId IN (SELECT Id FROM Currencies Where Id = :currency)';
$stmt = $db->prepare($sql);
for ($i = 0; $i<3; $i++) {
$stmt->execute(array(
':metal' => 'Silver',
':fixAM' => $fix['FixAM'][$i],
':fixPM' => $fix['FixPM'][$i],
':currency' => ($i+1))
);
}
例如,
$fix ['FixPM'] [$i]
的值有时为null。 如何将其插入数据库? 当我运行查询然后查看数据库中的数据时,此记录显示0.0000,而不是null。
如何使用PDO插入NULL值?提供了一些解决方案。
- 我认为我不能像示例那样使用
$stmt->execute(array(':v1' => null, ':v2' => ...))
,因为项目有时为空,有时不为空。 因此,我需要引用我创建的变量$ fix ['FixPM'] [$i]
并在需要时将其设置为null
提前致谢。
NULL
,还是字符串'NULL'
,当将其转换为数值时将会转换为0
?PDO 应该正确处理真正的NULL
,但字符串会发生转换。 - Michael Berkowski':fixPM' => strtoupper($fix['FixPM'][$i]) === 'NULL' ? NULL : $fix['FixPM'][$i],
- Michael Berkowski