| 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: 10 let
|
|||
0