2011-02-10 1 views
1

私は4つのテーブルを含むデータベースを持っていますが、私は他のテーブルとは別のテーブルを1つ使用しています。データベースの内容を0に設定する

この表で私は4つのフィールドがvarcharであり、残りはint(11個の他のフィールド)です。ユーザーがDBをすべて埋めるとすべてが正しく保存されますが、これまで3回発生していますintは明白な理由なしに0にリセットされます。最初は、私は考えました。なぜなら、それらのフィールド(数字がどこにあるべきか)はintではなく、varcharsだったからです。しかし、私はそれを変更したので、再び起こった。私はすでにコードを二重チェックしていますし、0値を更新したり挿入したりするものは何もありません。また、私はcodeigniterとSQLインジェクションから保護し、XSSフィルタリングを有効にしているアクティブなレコードを使用しています。誰かが私が行方不明かもしれない何かを指摘できるでしょうか?

また、私はこれの答えについてはかなり確信していますが、いくつかのデータを回復する方法はありますか?その他、再びすべてを埋めるために皆を依頼することよりも... =/

は** EDIT **

ザ・ストレージエンジンはMyISAMテーブルで、照合順序はlatin1_swedish_ciで、パックのキーがデフォルトしている、それはだ、すべての意図や目的のために通常のDB

** EDIT **

ここに私のテーブルの構造は、あなたが説明した内容から

-- 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 @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@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 ; 
+0

SET GLOBAL general_log = 'ON';彼が実行しているクエリについてのログを見てください –

+0

それは賃貸されたサーバであり、私はrootアクセスを持っていませんが、私は助けてくれるように管理者に依頼します=/ – Tsundoku

答えて

2

だ、それはあなたのdefaulのように聞こえます次の手順を実行し、デフォルトを削除するには

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

:フィールドのt値が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から始まるため、通常は問題ありません。

+0

私はそれを実行しようとしました。まさに私が明白に尋ねているところは分かりませんが、DBを扱うのは本当に錆びていて、これは一般的に問題ではない場合、なぜ私に影響を与えるのでしょうか? (ちょうどこれが起こっている理由についての説明を探しています) – Tsundoku

+0

私の "理由はあなたが0を見ている"を参照してください –

+0

構文エラーについては、テーブルとカラムの名前を変更しましたか?私はいくつかのプレースホルダを追加しました。 –

0

どのようなSQL_MODEを使用していますか?少なくともSTRICT_ALL_TABLESは必要ですが、信頼性の高いデータベースを取得するにはTRADITIONALとANSIがさらに優れている可能性があります。

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

私はSQL_MODE = "NO_AUTO_VALUE_ON_ZERO"を持っています。それは問題だろうか? – Tsundoku

+0

私はそれが何か変わるとは思わない、NO_AUTO_VALUE_ON_ZEROは他のフィールドではなくauto_incrementに関するものです。 –

関連する問題