我有同样的问题,并且不理解答案#5343141标题为“使用CodeIgniter将NULL插入数据库的正确方法”。我尝试了所有给出的答案,没有成功。
这是我的MySQL表:
最后两列:
`id_etablissement_commanditaire` int(10) unsigned DEFAULT NULL,
`id_etablissement_payeur` int(10) unsigned DEFAULT NULL,
这会产生问题,确实有“NULL”,因此它们接受NULL值(尝试使用phpMyAdmin,它可以工作)。
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
CREATE TABLE IF NOT EXISTS `contacts` (
`id_contact` int(10) unsigned NOT NULL AUTO_INCREMENT,
`service` varchar(50) NOT NULL,
`civilite` set('Monsieur','Madame') NOT NULL,
`prenom` varchar(50) NOT NULL,
`nom` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`tel_fixe` varchar(14) NOT NULL,
`tel_mobile` varchar(14) NOT NULL,
`fax` varchar(14) NOT NULL,
`id_etablissement_commanditaire` int(10) unsigned DEFAULT NULL,
`id_etablissement_payeur` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id_contact`),
KEY `id_etablissement_payeur` (`id_etablissement_payeur`),
KEY `id_etablissement_commanditaire` (`id_etablissement_commanditaire`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=28 ;
ALTER TABLE `contacts`
ADD CONSTRAINT `contacts_ibfk_2` FOREIGN KEY (`id_etablissement_payeur`) REFERENCES `etablissements_payeurs` (`id_etablissement_payeur`) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT `contacts_ibfk_3` FOREIGN KEY (`id_etablissement_commanditaire`) REFERENCES `etablissements_commanditaires` (`id_etablissement_commanditaire`) ON DELETE NO ACTION ON UPDATE NO ACTION;
这是我的CodeIgniter控制器代码:
1)我需要将$ _POSTs初始化为'',如果它们不存在。
if ( ! isset( $_POST['action'] ) ) $_POST['action'] = '';
if ( ! isset( $_POST['id_contact'] ) ) $_POST['id_contact'] = '';
if ( ! isset( $_POST['service'] ) ) $_POST['service'] = '';
if ( ! isset( $_POST['civilite'] ) ) $_POST['civilite'] = '';
if ( ! isset( $_POST['prenom'] ) ) $_POST['prenom'] = '';
if ( ! isset( $_POST['nom'] ) ) $_POST['nom'] = '';
if ( ! isset( $_POST['email'] ) ) $_POST['email'] = '';
if ( ! isset( $_POST['tel_fixe'] ) ) $_POST['tel_fixe'] = '';
if ( ! isset( $_POST['tel_mobile'] ) ) $_POST['tel_mobile'] = '';
if ( ! isset( $_POST['fax'] ) ) $_POST['fax'] = '';
if ( ! isset( $_POST['id_etablissement_commanditaire'] ) ) $_POST['id_etablissement_commanditaire'] = NULL;
if ( ! isset( $_POST['id_etablissement_payeur'] ) ) $_POST['id_etablissement_payeur'] = NULL;
对于最后2个if,我尝试初始化为''和NULL,但没有一个工作。
2)插入数据库:
$donnees = array(
'service'=> $_POST['service'],
'civilite'=> $_POST['civilite'],
'prenom'=> $_POST['prenom'],
'nom'=> $_POST['nom'],
'email'=> $_POST['email'],
'tel_fixe'=> $_POST['tel_fixe'],
'tel_mobile'=> $_POST['tel_mobile'],
'fax'=> $_POST['fax'],
'id_etablissement_commanditaire'=> $_POST['id_etablissement_commanditaire'] ,
'id_etablissement_payeur'=> $_POST['id_etablissement_payeur']);
$this->db->insert('contacts', $donnees);
如果我添加一个空记录,CodeIgniter说:
Error Number: 1452
Cannot add or update a child row: a foreign key constraint fails (`france-medical-transport`.`contacts`, CONSTRAINT `contacts_ibfk_2` FOREIGN KEY (`id_etablissement_payeur`) REFERENCES `etablissements_payeurs` (`id_etablissement_payeur`) ON DELETE NO ACTION )
INSERT INTO `contacts` (`service`, `civilite`, `prenom`, `nom`, `email`, `tel_fixe`, `tel_mobile`, `fax`, `id_etablissement_commanditaire`, `id_etablissement_payeur`) VALUES ('', '', '', '', '', '', '', '', '', '')
答案 0 :(得分:1)
尝试更改数据库插入脚本,如果它们没有值,则根本不包括列:
$donnees = array(
'service'=> $_POST['service'],
'civilite'=> $_POST['civilite'],
'prenom'=> $_POST['prenom'],
'nom'=> $_POST['nom'],
'email'=> $_POST['email'],
'tel_fixe'=> $_POST['tel_fixe'],
'tel_mobile'=> $_POST['tel_mobile'],
'fax'=> $_POST['fax']);
if ($this->input->post('id_etablissement_commanditaire')) $donnees['id_etablissement_commanditaire'] = $this->input->post('id_etablissement_commanditaire');
if ($this->input->post('id_etablissement_payeur')) $donnees['id_etablissement_payeur'] = $this->input->post('id_etablissement_payeur');
$this->db->insert('contacts', $donnees);
这将允许MySQL插入默认的NULL值,而不会被您尝试传入的任何值混淆,例如显式NULL或空字符串。
答案 1 :(得分:0)
这样做的好方法是:
$this->db->set('id_etablissement_commanditaire' , $_POST['id_etablissement_commanditaire'] , FALSE );
$this->db->set('id_etablissement_payeur' , $_POST['id_etablissement_payeur'] , FALSE );
$this->db->insert('contacts');
这样,最后一个参数FALSE意味着,NULL值不会被转义,然后我有NULL而不是' NULL'。
有效。
Nota:错误删除'',但它也会删除``。