Содержимое базы данных устанавливает себя в 0 - PullRequest
1 голос
/ 10 февраля 2011

У меня есть база данных, которая содержит 4 таблицы, однако я использую одну из них, которая отделена от других.

В этой таблице у меня есть 4 поля, которые являются varchar, а остальные являются целочисленными (11 других полей), когда пользователи заполняют БД, все сохраняется правильно, однако это происходило 3 раза настолько, что значения базы данных для int сбрасывается в 0 без видимой причины. Сначала я думал, что это потому, что эти поля (куда должны идти цифры) были varchars, а не ints. Однако, так как я изменил это, это случилось снова. Я уже дважды проверил свой код, и у меня нет ничего, что даже обновляет или вставляет значение 0. Кроме того, я использую codeigniter и активные записи, которые защищают от SQL-инъекций и имеют включенную фильтрацию XSS. Может ли кто-нибудь указать на то, чего мне не хватает, или на причину этого?

Кроме того, я почти уверен в ответе на этот вопрос, но есть ли ЛЮБОЙ способ восстановить некоторые данные ?? Кроме того, чтобы попросить всех заполнить все заново .. = /

** РЕДАКТИРОВАТЬ **

Механизм хранения - MyISAM, а Collation - 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 ]

2 голосов
/ 10 февраля 2011

Из того, что вы описали, похоже, что ваше значение по умолчанию для полей равно 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 значений, что, как правило, не является проблемой, поскольку идентификатор любой связанной таблицы начинался бы с 1, который является наиболее распространенным значением для целочисленного значения.

0 голосов
/ 10 февраля 2011

Что SQL_MODE вы используете?Вам нужно как минимум STRICT_ALL_TABLES, но TRADITIONAL и ANSI могут быть даже лучше, чтобы получить надежную базу данных.

SET SESSION sql_mode='traditional,ansi';
SELECT @@SESSION.sql_mode;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...