Я искал любую возможную помощь, которую можно найти в Интернете, но проблема с 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) вместо нулевого значения