php – 调试PDO mySql将NULL插入数据库而不是空
我试图使用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 QUERY: $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. How do I insert NULL values using PDO?提供了一些解决方案. >我不认为我可以使用$stmt-> execute(array(‘:v1’=> null,’:v2’=> …)),因为有时该项为null,有时不会.因此,我需要引用我创建的变量$fix [‘FixPM’] [$i]并在需要时将其设为null 提前致谢. 解决方法
在我看来,这是PDO准备的语句仿真中的一个(未报告的?)错误:
> PDOStatement的implementation :: execute()eventually调用 我的观点是,在switching on the parameter’s type之前(在上面的步骤2中),如果值为null,pdo_parse_params()应该将类型设置为PDO :: PARAM_NULL.但是,有些人可能会争辩说这会在适当的情况下阻止特定于类型的null值处理,在这种情况下,string case(在上面的步骤3中)应该在继续调用驱动程序的quoter()方法之前处理空值. 作为临时解决方法,禁用预准备语句仿真通常是最好的: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,FALSE); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |