Php PDO:为什么插入NULL会产生0

时间:2014-07-30 06:54:05

标签: php mysql pdo null

我搜索了可以在网上找到的任何可能的帮助,但仍然存在使用PHP PDO INSERT NULL的问题。

该脚本是一个csvupload脚本,最初来自这里Import CSV into MySQL

为了简化故事,让我介绍可能的原因..

if($linearray[4]=='Unknown')
    $linearray[4]=null;
$linemysql = implode("','",$linearray);
$linemysql = "'".$linemysql."'";
$setsu->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$tsuika = $setsu->prepare("INSERT INTO tablename (SubAgentID, BookID, AgentID, SubAgentName, Risk, Area, CurrentBalance) VALUES ($linemysql)");
$tsuika -> bindValue(':Risk', null, PDO::PARAM_INT);
$tsuika ->execute();

查看上面的代码,我在prepare语句中明确设置了字段值。 在phpmyadmin上,Risk字段接受NULL,将默认值设置为NULL,并且没有问题。但是当用PHP进行INSERT时,得到的值是0.为什么?

在插入之前,我回应它,​​如果字段$ linearray [4]包含未知,它将其转换为NULL,产生,''那部分。

表格结构

CREATE TABLE IF NOT EXISTS `subagentdb` (
`SubAgentID` int(10) NOT NULL AUTO_INCREMENT,
  `BookID` int(10) NOT NULL,
  `AgentID` int(10) NOT NULL,
  `SubAgentName` varchar(30) NOT NULL,
  `Risk` float DEFAULT NULL,
  `Area` varchar(20) NOT NULL,
  `CurrentBalance` float NOT NULL,
  PRIMARY KEY (`SubAgentID`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=1 ;

2 个答案:

答案 0 :(得分:0)

您将值明确地绑定为PDO::PARAM_INT。无论你传递什么值,都会因此而被转换为int。 null投放到0

要实际绑定SQL NULL值,您需要将值绑定为PDO::PARAM_NULL

答案 1 :(得分:0)

只使用PDO :: PARAM_NULL而不是PDO :: PARAM_INT?我认为NULL被转换为0(INT)而不是空值