Autor Zpráva
cahik
Profil *
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 *
databaze je InnoDB, takze transakce podporuje.
Joker
Profil
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
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
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 *
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
jedine, kde by se dalo usetrit je
DELETE FROM tab WHERE id IN (1,2,3,4,...)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0