Php PDO: Почему добавление NULL дает 0

Я искал любую возможную помощь, которую можно найти в Интернете, но проблема с INSERT NULL с использованием PHP PDO сохраняется.

Сценарий – это сценарий csvupload, изначально появившийся здесь. Импорт CSV в 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(); 

Посмотрев вышеприведенный код, я явно установил значения полей в готовом статусе. На phpmyadmin поле Risk принимает NULL, устанавливает значение по умолчанию NULL и не имеет проблем. Но при выполнении INSERT с PHP значение, которое оно получает, равно 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 ; 

Вы привязываете значение явно как PDO::PARAM_INT . Из-за этого любое значение, которое вы передадите, будет передано в int. null отличает 0 .

Чтобы на самом деле привязать значение NULL SQL, вам необходимо привязать значение как PDO::PARAM_NULL .

просто используйте PDO :: PARAM_NULL вместо PDO :: PARAM_INT? Я думаю, что NULL преобразуется в 0 (INT) вместо нулевого значения