Autor | Zpráva | ||
---|---|---|---|
nesta Profil |
#1 · Zasláno: 18. 7. 2011, 10:35:25 · Upravil/a: nesta
Zdravim, v oblasti PHP a MySQL som novy no ucim sa ich z knihy PHP5, MySQL, Apache. Dosiel som ku kapitole, kde sa uz PHP spaja s MySQL a vytvarame databazy. Mam jeden skript odpisany z knihy, kde sme databazu vytvorili, a druhy skript, ktorym sa ak som dobre pochopil pripajame k vytvorenej databaze a zapisujeme do nej data. Avsak pri tom druhom skripte mi vypisuje tuto chybu: Duplicate entry '1' for key 'PRIMARY' Neviete o co by mohlo ist ?
Tu je kod toho 2. skriptu: <?php // Pripojenie k MySQL $spojenie=mysql_connect("localhost", "bp5am", "bp5ampass") or die ("Skontrolujte svoje nastavenia"); // Nastavime novu databazu ako pracovnu mysql_select_db("moviesite"); // Vlozime data do tabulky "movie" $vlozit="INSERT INTO movie(movie_id, movie_name, movie_type, " . "movie_year, movie_leadactor, movie_director) " . "VALUES (1, 'Bozsky Bruce', 5, 2003, 1, 2), " . "( 2, 'Malery pana Sikuly', 5, 1999, 5, 6), " . "( 3, 'Grand Canyon', 2, 1991, 4, 3 )"; $vysledky=mysql_query($vlozit) or die (mysql_error()); //Nove data do tabulky "movietype" $typ="INSERT INTO movietype ( movietype_id, movietype_label )" . "VALUES ( 1,'Sci Fi' ), " . "( 2, 'Drama' ), " . "( 3, 'Dobrodruzny' ), " . "( 4, 'Vojnovy' ), " . "( 5, 'Komedia' ), " . "( 6, 'Horor' ), " . "( 7, 'Akcny' ), " . "( 8, 'Detsky' )"; $vysledky=mysql_query($typ) or die(mysql_error()); //Nove data do tabulky "people" $ludia="INSERT INTO people ( people_id, people_fullname, " . "people_isactor, people_isdirector )" . "VALUES ( 1, 'Jim Carrey', 1,0 ), " . "( 2, 'Tom Shadyac', 0,1), " . "( 3, 'Lawrence Kasdan', 0,1), " . "( 4, 'Kevin Kline', 1,0), " . "( 5, 'Ron Livingston', 1,0), " . "( 6, 'Mike Judge', 0,1)"; $vysledky=mysql_query($ludia) or die( mysql_error() ); echo "Vlozenie dat prebehlo uspesne"; ?> |
||
Dero Profil |
#2 · Zasláno: 18. 7. 2011, 11:39:54
Např. v tabulce movie máš jistě nad sloupcem movie_id definovaný primární klíč. Pokud v tabulce již máš záznam, pro který platí, že movie_id = 1, pak do ní nemůžeš vložit další takový záznam s movie_id = 1. Primární klíč musí být unikátní.
Řešením je definovat spolu s primárním klíčem i automatické navyšování o jedničku, auto_increment (pouč se třeba zde), a v dotazech, kdy vkládáš nová data, tento sloupec vůbec neuvádět. Jeho hodnota bude vygenerována automaticky. Např. tedy místo tohoto: INSERT INTO movie(movie_id, movie_name, ... ... budeš psát pouze: INSERT INTO movie(movie_name, ... |
||
nesta Profil |
#3 · Zasláno: 18. 7. 2011, 12:39:54 · Upravil/a: nesta
Ja myslim ze ten auto_increment je nastaveny. Vid prilozeny kod 1. skriptu, v ktorom sme vytvarali databazu.
<?php // Pripojenie k MySQL $spojenie=mysql_connect( "localhost", "bp5am", "bp5ampass") or die ("Skontrolujte svoje nastavenia"); // Vytvaranie novej databazy $tvorba=mysql_query( "CREATE DATABASE IF NOT EXISTS moviesite" ) or die (mysql_error() ); // Nastavenie novej databazy ako pracovnej mysql_select_db( "moviesite" ); // Vytvorime tabulku movie $filmy="CREATE table movie ( movie_id int( 11 ) NOT NULL auto_increment, movie_name varchar( 255 ) NOT NULL, movie_type tinyint( 2 ) NOT NULL default 0, movie_year int( 4 ) NOT NULL default 0, movie_leadactor int( 11 ) NOT NULL default 0, movie_director int( 11 ) NOT NULL default 0, PRIMARY KEY (movie_id), KEY movie_type ( movie_type, movie_year ) )"; $vysledky=mysql_query($filmy) or die (mysql_error()); // Vytvarame tabulky movietype $typyfilmov="CREATE table movietype( movietype_id int( 11 ) NOT NULL auto_increment, movietype_label varchar( 100 ) NOT NULL, PRIMARY KEY (movietype_id) )"; $vysledky=mysql_query($typyfilmov) or die (mysql_error()); //Vytvorime tabulku people $ludia="CREATE table people( people_id int( 11 ) NOT NULL auto_increment, people_fullname varchar( 255 ) NOT NULL, people_isactor tinyint( 1 ) NOT NULL default 0, PRIMARY KEY (people_id) )"; $vysledky=mysql_query($ludia) or die (mysql_error()); echo "Databaza filmov bola uspesne vytvorena"; ?> |
||
laijk Profil |
#4 · Zasláno: 18. 7. 2011, 13:17:11
však nastavený je, preto nepridávaj do DB tak ako to robíš ty, do stlpca s auto_increment nepíš nič, rob to takto:
$vlozit="INSERT INTO movie(movie_name, movie_type, " . // movie_id som odstránil "movie_year, movie_leadactor, movie_director) " . "VALUES ( 'Bozsky Bruce', 5, 2003, 1, 2), " . "( 'Malery pana Sikuly', 5, 1999, 5, 6), " . "( 'Grand Canyon', 2, 1991, 4, 3 )"; $vysledky=mysql_query($vlozit) or die (mysql_error()); alebo namiesto čísla dávaj hodnotu DEFAULT. |
||
nesta Profil |
#5 · Zasláno: 18. 7. 2011, 13:25:43
Vyborne, dakujem obom velmi pekne. Rozchodil som to a konecne mi v tom aspon trochu doplo.
|
||
Časová prodleva: 13 let
|
0