Php PDO:为什么插入NULL会产生0 [重复]

u7up0aaq  于 2023-01-24  发布在  PHP
关注(0)|答案(3)|浏览(163)
    • 此问题在此处已有答案**:

Insert NULL instead of empty string with PDO(3个答案)
22小时前关门了。
我搜索了任何可以在网上找到的帮助,但使用PHPPDO插入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]包含Unknown,它会将其转换为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 ;
pftdvrlh

pftdvrlh1#

你将值显式绑定为PDO::PARAM_INT,无论你传递什么值,都会被转换为int,因为null会被转换为0
要实际绑定SQL NULL值,需要将该值绑定为PDO::PARAM_NULL

q8l4jmvw

q8l4jmvw2#

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

cpjpxq1n

cpjpxq1n3#

如果您先备份然后再恢复表,空值将变为0。我找到的唯一更正方法是在创建表之后添加“UPDATE table SET foo to null WHERE foo = 0”。

相关问题