Autor Zpráva
nesta
Profil
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
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
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
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
Vyborne, dakujem obom velmi pekne. Rozchodil som to a konecne mi v tom aspon trochu doplo.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0