| 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: 15 let
|
|||
0