从linux / apache转移到IIs和codeigniter DB_driver.php给我错误,我不能再有空字段了?

时间:2013-06-17 13:17:07

标签: php mysql codeigniter

我在Linux上用apache。我搬到了IIs服务器。 我正在运行codeigniter 2.0.0

我有一个带有activerecords的插入,可以将表单中的数据插入数据库。数据库具有每个字段的默认值。它并没有成为一个问题。自移动以来,必须填写表单中的每个字段,否则我会收到此错误:

Une erreur de base de données s'est produite.
Error Number: 1292

Incorrect date value: '' for column 'DateNaissance' at row 1

INSERT INTO `patients` (`Nom`, `Prenom`, `Initial`, `Responsable`, `DateNaissance`) VALUES ('!teststef354', '!teststef9879', '', '0', '')

Filename: \system\database\DB_driver.php

Line Number: 330

也许我的codeigniter基本文件对于当前的php / mysql安装来说是旧的,所以我会一次升级一个版本。有什么方法可以解决这个问题吗?

我有其他应用程序在该服务器上运行,我没有,例如mrbs,它工作正常,我看到表中有空条目,没有任何问题。

编辑:

这是在我的模型中

function add_patient($postdata)
        {
            $resultat=0;
            if(!empty($postdata))
            {
                $resultat=$this->db->insert('patients',$postdata);

            }
            return $resultat;
        }

在我的控制器中我有这个:

$postdata = array (

        'Nom'=> $_POST['Nom'],
        'Prenom'=> $_POST['Prenom'],
        'Initial'=> $_POST['Initial'],
        'Responsable'=> $_POST['Responsable'],
        'DateNaissance'=> $_POST['DateNaissance']
);

我用以下方式调用模型:

$patientsadd=$this->patients_model->add_patient($postdata);
编辑:在phpmyadmin中运行sql查询给了我同样的错误。在mysql命令提示符下运行SQL查询也给了我同样的错误,所以这是一个MySQL问题。

这是表格的Create语句:

CREATE TABLE IF NOT EXISTS `patients` (
  `IdPatient` int(11) NOT NULL AUTO_INCREMENT,
  `Nom` varchar(50) DEFAULT NULL,
  `Prenom` varchar(50) DEFAULT NULL,
  `Initial` varchar(4) DEFAULT NULL,
  `Responsable` int(11) DEFAULT '0',
  `DateNaissance` date DEFAULT '0000-00-00',
  PRIMARY KEY (`IdPatient`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=397 ;

编辑:好的,这样可行:

这就是我所做的。我确实有比这更多的领域但我为了问题目的缩短了它。

所有文本字段都可能存在问题,因此我将对其进行全部编辑。至少这种方式我没有将空值传递给模型,MySQL也不会扼杀它。它确实有文本字段的默认NULL值(想要这样),所以这应该解决这个错误。

$postdata = array();

        $postdata['Nom'] =  $_POST['Nom'];
        $postdata['Prenom'] = $_POST['Prenom'];
        $postdata['Initial'] =  $_POST['Initial'];
        $postdata['Responsable'] =  $_POST['Responsable'];

        if (isset($_POST['DateNaissance']))
        {}else {$postdata['DateNaissance'] = $_POST['DateNaissance']; }

感谢所有评论者帮助我查明问题的根源!

我仍然认为我有问题,我犯了一个错误,

这一部分:

if (isset($_POST['DateNaissance']))
        {}else {$postdata['DateNaissance'] = $_POST['DateNaissance']; }

应该是:

if (empty($_POST['DateNaissance']))
         {}else{$postdata['DateNaissance'] = $_POST['DateNaissance']; }

1 个答案:

答案 0 :(得分:0)

您可以将控制器信息更改为:

$postdata = array (
        'Nom'=> $_POST['Nom'],
        'Prenom'=> $_POST['Prenom'],
        'Initial'=> $_POST['Initial'],
        'Responsable'=> $_POST['Responsable'],
        'DateNaissance'=> ($_POST['DateNaissance']=='') ? 0 : $_POST['DateNaissance'];
);

请参阅删除错误 - 我收到错误消息(更改前)

'第1行'

列'DateNaissance'栏的数据被截断