数据库内容将自身设置为0

时间:2011-02-10 06:53:42

标签: php mysql database codeigniter

我有一个包含4个表的数据库,但是我使用的是其中一个与其他表分开的表。

在这个表中,我有4个字段是varchar,其余是int(其他11个字段),当用户填满数据库时,所有内容都被正确保存,但是到目前为止它已经发生了3次,数据库值为int没有任何明显的原因重置为0。起初,我想,这是因为那些字段(数字应该去的地方)是varchars而不是int。但是,自从我改变它以后,它再次发生了。我已经仔细检查了我的代码,我甚至没有任何更新或插入0值。此外,我正在使用codeigniter和活动记录来防止SQL注入并启用XSS过滤,任何人都可以指出我可能缺少的东西或者发生这种情况的原因吗?

另外,我非常肯定这个问题的答案,但有没有办法恢复一些数据?除了不得不要求每个人再次填写所有内容.. = /

**编辑**

存储引擎是MyISAM,而排序规则是latin1_swedish_ci,默认包装密钥,出于所有意图和目的,它是普通的数据库

**编辑**

这是我的表格结构

-- phpMyAdmin SQL Dump
-- version 3.3.5
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Feb 10, 2011 at 09:31 AM
-- Server version: 5.0.51
-- PHP Version: 5.2.14

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `cinesdec_prueba`
--

-- --------------------------------------------------------

--
-- Table structure for table `Oscar`
--

CREATE TABLE IF NOT EXISTS `Oscar` (
  `Id` int(20) NOT NULL auto_increment,
  `Nombre` varchar(100) default NULL,
  `ApPaterno` varchar(100) default NULL,
  `ApMaterno` varchar(100) default NULL,
  `Edad` varchar(25) default NULL,
  `Twitter` varchar(250) default NULL,
  `Correo` varchar(250) NOT NULL default '',
  `BestPicture` int(10) unsigned NOT NULL,
  `ActorLead` int(10) unsigned NOT NULL,
  `ActorSupport` int(10) unsigned NOT NULL,
  `ActressLead` int(10) unsigned NOT NULL,
  `ActressSupport` int(10) unsigned NOT NULL,
  `Art` int(10) unsigned NOT NULL,
  `Directing` int(10) unsigned NOT NULL,
  `Foreing` int(10) unsigned NOT NULL,
  `Music` int(10) unsigned NOT NULL,
  `Visual` int(10) unsigned NOT NULL,
  `Desempate` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`Correo`),
  UNIQUE KEY `Id` (`Id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=89 ;

2 个答案:

答案 0 :(得分:2)

根据您的描述,听起来您的默认值为0。

您可能已使用默认值创建了表格,如下所示:

`[column_name]` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0'

要删除默认值,请执行以下操作:

ALTER TABLE `[table_name]` CHANGE `[column_name]` `[column_name]` INT( 10 ) UNSIGNED NOT NULL;

将删除默认值0(请注意删除DEFAULT '0')。

您看到0的原因:当默认值为0时,如果您的INSERT语句不包含该字段,MySQL将只在该字段中插入默认值。

我猜你用来创建表的软件会自动添加0值,这通常不是问题,因为任何相关表的id都从1开始,这是整数值的最常见值。

答案 1 :(得分:0)

您使用的是什么SQL_MODE?您至少需要STRICT_ALL_TABLES,但传统和ANSI可能会更好地获得可靠的数据库。

SET SESSION sql_mode='traditional,ansi';
SELECT @@SESSION.sql_mode;