Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: standardowy insert
Forum PHP.pl > Forum > Bazy danych
halfik
Mam taką strukturę:

[sql:1:7e8ba38c0d]
CREATE TABLE Users (
USER_ID BIGINT AUTO_INCREMENT UNIQUE PRIMARY KEY,
PROFILE_ID INT NOT NULL,
login VARCHAR(25) NOT NULL,
pass CHAR(32) NOT NULL,
email VARCHAR(100) NOT NULL,
school VARCHAR(100),
city VARCHAR(100),
voivoidship VARCHAR(25),
register_date DATE,
register_time INT(10),
WWW VARCHAR(100),
hobby TEXT,
GG INT(10),
tlen VARCHAR(50),
born_date DATE,
sex CHAR(1) NOT NULL DEFAULT 'M',
is_hidden tinyint(4) NOT NULL DEFAULT '0',
is_active tinyint(4) NOT NULL DEFAULT '0',
is_banned tinyint(4) NOT NULL DEFAULT '0',
is_protected INT(1) NOT NULL DEFAULT '0',
mkdate_of_last_readed_post INT(10) NOT NULL DEFAULT '0',
posts_number INT NOT NULL DEFAULT '0',
signature TEXT,
avatar_file VARCHAR(35)
);
[/sql:1:7e8ba38c0d]

Chodzi o wartosc pola is_protected <- moge tam wprowadzic wartosc 1, ale nie mogę 0 i nie wiem dlaczego, siedzę już od 2 dni i nadal nie wiem w czym tkwi problem.

A aby było zabawniej nie ma żadnych błędów, a przynajmniej nie wykazuje ich mysql_error();
scanner
Jak to nie możes "0"? pokaz inserta, którym wstawaisz dane.
kszychu
No to nic tam nie wstawiaj, poleci na defaulcie ;-)
halfik
[sql:1:ee12610425]
query = "INSERT INTO VALUES ('', ".$_POST['profile'].", '$newLogin', '$hashedPass',
'$newEmail', '".$_POST['studia']."', '$newCity', '".$_POST['wojewodztwo']."',
'$date', '$mkdate', '$newWWW','$newHobby', '$newGG', '$newTlen', '$bornDate',
'".$_POST['plec']."', '0', '0', '0', '$protect', '0', '0', NULL, NULL)";
[/sql:1:ee12610425]

A po defaulcie też nie chce lecieć. Co ciekawe jak wpisuje zapytanie bezpośrednio z monitora bazy to wszystko jest cacy, wygląda to co najmniej dziwnie...

Dalej: jak usunąłem pole is_pretected to nadal zapytanie nie dawało wyniku. A z durną 1 w miejscu is_pretected działa... sprawdze to na phpie 5, może to wina interpretera...
scanner
a) wartości liczbowych nie zamykaj w ' '
cool.gif $protect jest typu int?


___
OT
___
Lekko zmodfikowąłem Twoją tabelę (popatrz na pola typu "SET")[sql:1:3d29f63216]CREATE TABLE `Users` (
`USER_ID` int(11) NOT NULL auto_increment,
`PROFILE_ID` int(11) NOT NULL default '0',
`login` varchar(25) NOT NULL default '',
`pass` varchar(32) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`school` varchar(100) default NULL,
`city` varchar(100) default NULL,
`voivoidship` varchar(25) default NULL,
`register_date` date default NULL,
`register_time` int(10) default NULL,
`WWW` varchar(100) default NULL,
`hobby` text,
`GG` int(10) default NULL,
`tlen` varchar(50) default NULL,
`born_date` date default NULL,
`sex` set('F','M','U') NOT NULL default 'U',
`is_hidden` set('Y','N') NOT NULL default 'N',
`is_active` set('Y','N') NOT NULL default 'N',
`is_banned` set('Y','N') NOT NULL default 'N',
`is_protected` set('Y','N') NOT NULL default 'N',
`mkdate_of_last_readed_post` int(10) NOT NULL default '0',
`posts_number` int(11) NOT NULL default '0',
`signature` text,
`avatar_file` varchar(35) default NULL,
PRIMARY KEY (`USER_ID`),
UNIQUE KEY `USER_ID` (`USER_ID`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
[/sql:1:3d29f63216]NIe mam czasu przeyglądac się teraz całej. Ale SET ('Y', 'N') dość dobrze opisują to co się w nich znajduje.
MySQL nie ma (AFAIR) pól typowo bitowych - a przydałyby się. Char zajmuje 1 bajt, TinyInt AFAIR 4 a pola bitowe (true/false) zajmowałby 1/8 bajta - niesamowita oszczędność i wygoda.
GDzieś tu na forum przewijał się też temnat masek bitowych, czyli zapisania Twoich 4 pól is_* w jedno o wartości, np. 1111 - czyli wszystko na "on" - przeliczajac takizapis na dziesietny mamy liczbę "15" (jedno pole tinyint) a szesnastkowo to "F" - czyli nawet jedno pole "char(1)" do opisy max 8 zmiennych.
Ehh.. sorki.. zrobiłem OT.
zalew
Cytat
[sql:1:4d4b23f9e8]
query = " ... '".$_POST['plec']."', '0', '0', '0', '$protect', '0', '0', NULL, NULL)";
[/sql:1:4d4b23f9e8]

wyjmij zmienna z '', pewnie ci traktuje jako string i probuje zapisac do bazy napis '$protect', a ze pole jest typu int to nie przyjmuje napisu i daje deafult czyli '0'... widze, ze reszte zmiennych powyjmowales ze stringa widac o tej zapomniales..

voila ;)

[sql:1:4d4b23f9e8]query = "INSERT INTO VALUES ('', ".$_POST['profile'].", '$newLogin', '$hashedPass',
'$newEmail', '".$_POST['studia']."', '$newCity', '".$_POST['wojewodztwo']."',
'$date', '$mkdate', '$newWWW','$newHobby', '$newGG', '$newTlen', '$bornDate',
'".$_POST['plec']."', '0', '0', '0', '".$protect."', '0', '0', NULL, NULL)";
[/sql:1:4d4b23f9e8]
halfik
to z '' i tak nic nie dawało.

A faktycznie później zamieniłem inty na zbiory tylko, że na 0,1 i pomogło. Ale nadal ciekawi mnie fakt, że z poziomu phpa nie mogłem umieścić tam w pola int samych 0...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.