Autor | Zpráva | ||
---|---|---|---|
Icka Profil * |
#1 · Zasláno: 17. 8. 2015, 09:15:37
Ahojte, zkouším vytvořit mysql transakci, ale do mysql se mi zapíše vždy jen jedna položka z toho cyklu foreach. Mohl by mi někdo poradit co dělám špatně?
mysql_query("SET AUTOCOMMIT=0"); mysql_query("START TRANSACTION"); $q = mysql_query("INSERT INTO productions (nazev,txt_kratky,txt_dlouhy,pozice,aktivni) VALUES ('".$_POST["nazev"]."','".$_POST["txt_short"]."','".$_POST["txt_long"]."',".($pos+1).",1)"); if ($q && isset($_POST["photos"])) { foreach ($_POST["photos"] as $photo) { mysql_query("INSERT INTO productions_photo (productions_id,soubor,aktivni) VALUES (LAST_INSERT_ID(),'".$photo."',1)"); } } mysql_query("COMMIT"); mysql_query("SET AUTOCOMMIT=1"); |
||
juriad Profil |
Icka:
Vypiš si chybu pomocí mysql_error. Mám dojem, že id productions by sis měl zjistit funkcí mysql_insert_id po provedení $q. A jeho hodnotu doplnit do 9. řádku místo volání funkce LAST_INSERT_ID , protože ta se vztahuje k poslednímu INSERTu, což mohl být i INSERT do tabulky productions_photo . A to způsobí chybu cizího klíče.
Mimochodem, tvůj skript je náchylný na SQL Injection. Stačí v názvu, krátkém či dlouhém popisu nebo názvu souboru použít apostrof a dotaz ti selže. Transakce ti nepomůže, protože nikde neodchytáváš chyby a nerollbackuješ. Funkce z rodiny mysql_* jsou zastaralé a PHP 7 již nebudou existovat, zvaž použití modernější knihovny, nejbližší je mysqli_*. |
||
Icka Profil * |
#3 · Zasláno: 17. 8. 2015, 11:30:02
Ano je to tak, mysql_insert_id() pomohlo.
Také jsem přepsal mysql() na mysqli() Transakci jsem odebral a ještě doplním zřejmě o mysqli_real_escape_string() |
||
Časová prodleva: 9 let
|
0