Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Změna záznamu v MySQL

Mám tabulku se psy. Občas je potřeba připsat psovi zkoušky etc.
Všechno mi chodí, jen když poedituji psa a odešlu to do databáze, vloží se mi to jako nový řádek, místo aby se změnily údaje toho editovaného.
Co dělám blbě? Dotaz mám

$sql = "UPDATE `psi_jmena` WHERE `id` = '$id' SET `
(
'$id
','$jmeno      
','$vrh         
','$narozeni    
','$matka       
','$otec        
','$popis_cz    
','$popis_en    
','$zkousky_cz  
','$zkousky_en  
','$rtg         
','$hd          
','$chovny  
')";

Ty ',' mám na začátku řádku schválně, jelikož mi jdou vkládat proměnné jako sloupcový blok :-)

Předmět Autor Datum
Takhle to musí být: $sql = "UPDATE `psi_jmena` SET `sloupec1` = 'hodnota1', `sloupec2` = 'hodnota2'…
marekdrtic 20.08.2010 07:41
marekdrtic
Jo rozumím. Rozepsat ty sloupce.
Kráťa 20.08.2010 08:53
Kráťa
... a WHERE nakonec.
host 20.08.2010 08:55
host
Jenom bych podotknul, že v tomto případě (pes je jednoznačně určen svým id) by se dal určitě použít…
hynajs 20.08.2010 09:09
hynajs
Nojo. Mám to $sql = "UPDATE `psi_jmena` SET `vrh` = '$vrh', `narozeni` = '$narozeni', `matka` = '$m…
Kráťa 21.08.2010 02:19
Kráťa
Vyzkoušej to v jiném domě, v tvém je asi nějak narušen časoprostor :-D. po tom $sql = .... si dej ec…
marekdrtic 21.08.2010 10:01
marekdrtic
Já mám podezření, že se blbě předá ta proměnná id. Ještě jsem to nezkoumal.
Kráťa 21.08.2010 14:52
Kráťa
V tom případě je hned první věta v dokumentaci MySQL o UPDATE http://dev.mysql.com/doc/refman/4.1/e…
hynajs 21.08.2010 12:47
hynajs
Odpovídám stejně jako kolegovi výš. Tím, že ten dotaz provedu v phpMyAdminovi to vlastně zjistím hne…
Kráťa 21.08.2010 14:52
Kráťa
Přiznám se, že jsi mě přinutil číst dokumentaci,dělat pokusy a zkoumat, zda existuje syntaxe,okolnos…
hynajs 21.08.2010 15:56
hynajs
No je to záhada. Ještě testnu echem místo vložení do db, jestli se přenese dobře id. V tabulce mám s…
Kráťa 21.08.2010 18:19
Kráťa
Zkus vymazat tu čárku za tím '$chovny'
MaSo 21.08.2010 18:22
MaSo
Jo to byla chybka co mi to vyhazovalo. Jinak co se týče toho problému s novým řádkem, jsem pitomec a… poslední
Kráťa 21.08.2010 18:30
Kráťa

Takhle to musí být:

$sql = "UPDATE `psi_jmena` SET
`sloupec1` = 'hodnota1',
`sloupec2` = 'hodnota2',
......
`sloupecx` = 'hodnotax'

WHERE `id` = '$id'";

Divím se, že ti to, cos napsal, fungovalo :-).

Tady to máš popsané:
http://dev.mysql.com/doc/refman/5.0/en/update.html

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Jenom bych podotknul, že v tomto případě (pes je jednoznačně určen svým id) by se dal určitě použít i MYSQL příkaz REPLACE

http://dev.mysql.com/doc/refman/5.0/en/replace.htm l

jenž má výhodu, že se nemusíme rozhodovat mezi INSERT INTO a UPDATE.
Ale také nevýhody, které jsou popsány zde :

replace.php

Na rozdíl od článečku nejsem tak kategorický a příkaz používám, jenom je třeba zmapovat předem, zda nebude někdy nutné přidávat další UNIQUE klíč apod.
Databáze psíků je, myslím, klasický případ, kdy REPLACE lze použít.

REPLACE ale není v každém SQL, např. v databázi Caché, v níž pracuji nyní ( tam je to řetězcová funkce). Podrobný přehled neznám, ale stačí pohled do dokumentace konkrétní databáze.

Pokud REPLACE zamítneme, lze použít INSERT INTO ON DUPLIKATE KEY

http://dev.mysql.com/doc/refman/5.0/en/insert-on-d uplicate.html

se stejnou výhodou.

Nojo. Mám to

$sql = "UPDATE `psi_jmena` SET
`vrh` = '$vrh',
`narozeni` = '$narozeni',
`matka` = '$matka',
`otec` = '$otec',
`popis_cz` = '$popis_cz',
`popis_en` = '$popis_en',
`zkousky_cz` = '$zkousky_cz',
`zkousky_en` = '$zkousky_en',
`rtg` = '$rtg',
`hd` = '$hd',
`chovny` = '$chovny',

WHERE `id` = '$id'";

a stejně se nezmění záznam u toho id, ale udělá se nový řádek :-(

V tom případě je hned první věta v dokumentaci MySQL o UPDATE

http://dev.mysql.com/doc/refman/4.1/en/update.html

špatně. Cituji :

For the single-table syntax, the UPDATE statement updates columns of existing rows in the named table with new values.

Proběhla revoluce v MySQL, výstřel z Aurory si odpustíme, stačí bouchat šampaňským.:-D

Teď vážně, Kráťo, nemáš tam ještě před tím jiný kód ? Nebo potom ? Skutečně tam řádka přibude ?

No je to záhada. Ještě testnu echem místo vložení do db, jestli se přenese dobře id. V tabulce mám sloupec id int a autoincrement a asi pokud by se id blbě přenášelo, vznikl by nový řádek.

[http://pc.poradna.net/file/view/3921-update-prida- radek-gif]

ten dotaz je

$sql = "UPDATE `psi_jmena` SET
`vrh` = '$vrh',
`narozeni` = '$narozeni',
`matka` = '$matka',
`otec` = '$otec',
`popis_cz` = '$popis_cz',
`popis_en` = '$popis_en',
`zkousky_cz` = '$zkousky_cz',
`zkousky_en` = '$zkousky_en',
`rtg` = '$rtg',
`hd` = '$hd',
`chovny` = '$chovny',

WHERE `id` = '$id'";

Zpět do poradny Odpovědět na původní otázku Nahoru