【问题标题】:How to insert a NULL into a database with CodeIgniter?如何使用 CodeIgniter 将 NULL 插入数据库?
【发布时间】:2014-09-24 21:59:15
【问题描述】:

我有同样的问题,但不理解题为“使用 CodeIgniter 将 NULL 插入数据库的正确方法”的答案 #5343141。我尝试了所有给出的答案,但没有成功。

这是我的 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 ('', '', '', '', '', '', '', '', '', '')

【问题讨论】:

标签: mysql codeigniter null


【解决方案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 或空字符串。

【讨论】:

  • 嗨,克里斯,我想过,我想我会这样做,但我很高兴找到一种使用 #5343141 答案的方法。这意味着 3 种情况,第一种:设置了两个 ID,第二种:设置了一个 ID,但没有设置另一个,第三种:与第二种情况相反。
  • 这不喜欢成为好方法,因为我不自己编写 SQL 代码,因为 CodeIgniter 为我编写它。暂时不工作。期待...
【解决方案2】:

这样做的一个好方法是:

$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'。

有效。

注意: FALSE remove '',但它也会删除 ``。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多