Autor | Zpráva | ||
---|---|---|---|
cahik Profil * |
#1 · Zasláno: 25. 6. 2008, 19:52:36
patrne takovej lamackej dotaz. ale docela me to tizi. PHP nezvlada slozitejsi SQL prikazy? jde o to ze mam zobrazenych nekolik zaznamu z databaze pro editaci. abych nemusel slozite zjistovat co se zmenilo, chtel jsem vytvorit pomoci cyklu a podminek slozitejsi dotaz. vypada takhle.
START TRANSACTION; UPDATE `absence` SET `od` = '2008-06-27 22:12:31',`do` = '2008-06-25 22:12:35',`duvod` = 'neco' WHERE `id` = '1' LIMIT 1; UPDATE `absence` SET `od` = '2008-05-06 13:34:00',`do` = '2008-06-24 22:12:35',`duvod` = 'test' WHERE `id` = '3' LIMIT 1; COMMIT; jde o to ze ty update se tvori cyklem, kterej nacita data z uzivatelskyho vstupu. Muze do toho byt zamichanej este navic i nejakej DELETE. problem je v tom ze takhle vytvorenej skript jede pokud si ho ze skriptu vytisknu a vlozim do phpMyAdmin. primo z toho skriptu nejede, vyhodi to tuhle chybu You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; UPDATE `absence` SET `od` = '2008-06-27 22:12:31',`do` = '2008-06-25 22:12:35'' at line 1 nejak to nechapu. bud prikaz mysql_query neumi predat slozitejsi dotaz, nebo delam nejakou totalne lamerskou chybu. |
||
cahik Profil * |
#2 · Zasláno: 25. 6. 2008, 19:56:43
databaze je InnoDB, takze transakce podporuje.
|
||
Joker Profil |
#3 · Zasláno: 25. 6. 2008, 20:02:08
cahik
bud prikaz mysql_query neumi predat slozitejsi dotaz Tak v první řadě mysql_query provede vždycky jenom jeden dotaz (viz manuál: http://cz.php.net/mysql_query ), takže posílat tam tři najednou nemá smysl. |
||
lordfrikk Profil |
#4 · Zasláno: 25. 6. 2008, 20:40:51
Pokud za každou cenu musíš posílat více dotazů najednou, použij namísto MySQL rozšíření MySQLi a funkci mysqli_multi_query
|
||
Alphard Profil |
#5 · Zasláno: 25. 6. 2008, 21:27:38 · Upravil/a: Alphard
cahik
z bezpečnostních (AFAIK) nelze přes mysql_query() posílat více dotazů oddělených ;, jak již psal Joker ale transakci by nemělo vadit postupné posílání, takže: mysql_query ("start transaction"); mysql_query ("UPDATE `absence` SET `od` = '2008-06-27 22:12:31',`do` = '2008-06-25 22:12:35',`duvod` = 'neco' WHERE `id` = '1' LIMIT 1"); ... mysql_query ("commit"); // nebo řešení od lordfrikk, zůstal mi tady skoro hodinu zapomenutý panel :-) |
||
cahik Profil * |
#6 · Zasláno: 25. 6. 2008, 23:11:50
dik za odpovedi a rady :)
nejde o to ze bych za kazdou cenu musel posilat vic prikazu naraz, ale prislo mit to lepsi z hlediska zateze na databazi. ze bych nemusel odesilat x prikazu ale poslal to potom naraz jako blok. nevim sice jak moc vyrazna, nebo jestli vubec, je to uspora ale prijde mi to vhodnejsi. |
||
peta Profil |
#7 · Zasláno: 26. 6. 2008, 08:18:36
jedine, kde by se dalo usetrit je
DELETE FROM tab WHERE id IN (1,2,3,4,...) |
||
Časová prodleva: 16 let
|
0