Autor | Zpráva | ||
---|---|---|---|
Fik Profil * |
Zdravim,
potrebuji udelat hromadnou zmenu prirazenych FK(id) v jedne tabulce. Udelal jsem si na to takovyto skript bohuzel zatim nefunguje. Kde muze by problem. <? include "dbconnect.php"; include "utility.php"; $sql2 = 'SELECT idSTARE, idNOVE FROM idStareNaNove'; $q->query($sql2); if ($q->num_rows() > 0): while ($q->next_record()): $idSTARE = $q->f("idSTARE"); $idNOVE = $q->f("idNOVE"); $sqlupdate = 'UPDATE cars SET id="'.$idNOVE.'" WHERE id="'.$idSTARE.'" '; endwhile; endif; ?> Moderátor Majkl578: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
Moderátor Majkl578: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou.
|
||
Majkl578 Profil |
#2 · Zasláno: 19. 10. 2010, 10:23:57
Možná v tom, že ten dotaz nespouštíš?
|
||
Časová prodleva: 8 dní
|
|||
Fik Profil * |
#3 · Zasláno: 27. 10. 2010, 09:18:26
Zdravím,
dostal jsem se k tomu až opět dneska. Upravil jsem to tedy takto, ale bohužel žádná změna. $sqlupdate = 'UPDATE cars SET id="'.$idNOVE.'" WHERE id="'.$idSTARE.'" '; $q->query($sqlupdate); |
||
Joker Profil |
#4 · Zasláno: 27. 10. 2010, 09:32:32
Fik:
„skript bohuzel zatim nefunguje. Kde muze by problem.“ Je to rozbité. Chybová hláška? Něco v mysql_error? |
||
Fik Profil * |
#5 · Zasláno: 27. 10. 2010, 09:36:10
Chybová hláška není žádná, skript se zdá i provede, ale co se týče změn v tabulce tak není změna žádná.
|
||
__construct Profil |
#6 · Zasláno: 27. 10. 2010, 09:37:34 · Upravil/a: __construct
Fik:
„Chybová hláška není žádná“ Samozrejme pretože syntakticky je to OK, ale MySQL chybu nezobrazuješ … „skript se zdá i provede“ My žiaľ nevieme aký pretože obsah includovaných súborov si sem nedal … |
||
Fik Profil * |
#7 · Zasláno: 27. 10. 2010, 09:49:22
Co se týče includovaných souborů, tak pomocí tohoto - include "dbconnect.php"; se připojuji k db...jsou tam uvedeny proměnné jako kam, kdo a jak.... tento soubor používám i v jiných skriptech.... a funguje správně. Ten druhý include jsem již odstranil (neměl tam co dělat).
Jinak nyní jsem se koukal i na poslední změnu tabulky, kde se mají změny provádět a ten se změnil, ale žádná změna provedena nebyla. |
||
Fik Profil * |
#8 · Zasláno: 27. 10. 2010, 09:58:28
Samozřejmě tou změnou jsem měl na mysli čas...vypadlo mi to tam.
|
||
Joker Profil |
#9 · Zasláno: 27. 10. 2010, 09:59:12
Fik:
Ani databáze nevrátí žádnou chybu? Jak vypadají odesílané dotazy (tedy $sqlupdate)? Při zkopírování dotazu třeba do phpMyAdmina se provede správně? Poznámky: - Je možné, že třeba je všechno správně, jen v tabulce není žádné správné „staré“ ID. - Je správně, že se ID dávají jako řetězce? Od ID bych čekal spíš číslo. |
||
__construct Profil |
#10 · Zasláno: 27. 10. 2010, 10:06:51 · Upravil/a: __construct
Tak ako píše Joker skús toto:
<?php include "dbconnect.php"; $sql2 = 'SELECT idSTARE, idNOVE FROM idStareNaNove'; $q->query($sql2); echo "<pre>"; if ($q->num_rows() > 0): while ($q->next_record()): $idSTARE = $q->f("idSTARE"); $idNOVE = $q->f("idNOVE"); $sqlupdate = 'UPDATE cars SET id="'.$idNOVE.'" WHERE id="'.$idSTARE.'" '; echo $sqlupdate."\n"; endwhile; endif; Ak je chyba niekde inde nezistíme to vzhľadom k tomu že si sem nedal obsah toho súboru na pripojenie k DB. Joker: „Je správně, že se ID dávají jako řetězce? Od ID bych čekal spíš číslo.“ Pokiaľ viem MySQL si sám prevedie typ na aký potrebuje |
||
Fik Profil * |
#11 · Zasláno: 27. 10. 2010, 10:07:57
Tabulky jsou v pořádku, id jsou v obou tabulkách a jsou mediumint - taktez v obou table
|
||
Fik Profil * |
#12 · Zasláno: 27. 10. 2010, 10:21:32
Aha, tak už asi vím, kde je chyba, provede se žrejmě jen první řádek
tady když mám tabulku idStareNaNove a tam první řádek idStare 3400 idNove 17004 tak mi to provede u všech takovýchto záznamů změnu, ale již to nejde na další řadek kde je třeba isStare 3500 idNove 17005, takže budu mít nějaký "bug" asi v cyklu... |
||
nightfish Profil |
#13 · Zasláno: 27. 10. 2010, 11:17:01
Fik:
No bug to bude vcelku klasický. Protože si nikde neukládáš výsledky dotazů, tak musí být výsledek uložen někde v $q. A protože uvnitř toho cyklu provádíš dotaz, tak se ti jeho výsledek uloží do $q a v následujícím kole cyklu while pak $q->next_record() vratí false. |
||
AM_ Profil |
#14 · Zasláno: 28. 10. 2010, 11:33:19
ta knihovna pro databázi je dost nešťastná, reprezentovat spojení s DB a výsledek dotazu jedním objektem je tragédie. Raději ji zahoď a používej obyčejné mysqli nebo si stáhni něco alespoň trochu osvědčeného jako DiBi.
|
||
Fik Profil * |
#15 · Zasláno: 29. 10. 2010, 08:27:18
nightfish:
"No bug to bude vcelku klasický. Protože si nikde neukládáš výsledky dotazů, tak musí být výsledek uložen někde v $q." "A protože uvnitř toho cyklu provádíš dotaz, tak se ti jeho výsledek uloží do $q a v následujícím kole cyklu while pak $q->next_record() vratí false." A nestacilo by tedy kdybych dotaz s updatem ukladal treba do $f? |
||
Časová prodleva: 4 dny
|
|||
Fik Profil * |
#16 · Zasláno: 2. 11. 2010, 09:27:32
Tak změna proměnné nepomohla (ostatně jak jsem předpokládal). Zkusil jsem to ještě takto, ale také žádná změna.
if ($q->num_rows() > 0): while ($q->next_record()): $idSTARE = $q->f("idSTARE"); $idNOVE = $q->f("idNOVE"); $count=$q; $sqlupdate = 'UPDATE cars SET id="'.$idNOVE.'" WHERE id="'.$idSTARE.'" '; $q->query($sqlupdate); echo $sqlupdate."\n"; $q=$count; endwhile; endif; |
||
__construct Profil |
#17 · Zasláno: 2. 11. 2010, 10:04:01 · Upravil/a: __construct
Fik:
Pozri ↑ |
||
AM_ Profil |
#18 · Zasláno: 2. 11. 2010, 16:15:23
já se zase odvolám na svůj příspěvek [#14] AM, prostě to řešení jedním objektem je tragicky špatné, ignorováním mého příspěvku a snahou to nějak obejít to nezměníš. Jestli už máš tuhle třídu pro práci s databází v projektu široce použitou a nechce se ti to přepisovat, tak zachovej tuto možnost, ale zároveň do té třídy přidej možnost, aby byl výsledek dotazu reprezentován novým objektem (a nebyl smazán v momentě, kdy se zavolá dotaz jiný).
|
||
Časová prodleva: 14 let
|
0