Autor | Zpráva | ||
---|---|---|---|
tester Profil * |
#1 · Zasláno: 27. 3. 2016, 15:28:41
Proč vrácení ovlivněných řádků pro UPDATE nefunguje?
$res = mysql_query($this->query); if (!$res) die('Invalid query: ' . mysql_error()); $result = $this->query[0]=='S' ? @mysql_num_rows($res) : mysql_affected_rows(); echo "<p>".$this->query." ... result is: $result<p>"; Výstup: UPDATE online SET utime = NOW(), agent='Moz/5.0 (Win NT 5.1; rv:32.0) Gecko/20100101 FF/32.0', url='testimonials', action='', upage = '33' WHERE ip = '2130706433' AND user = '' AND usertype = '-1' ... result is: 0 Čas v záznamu v tabulce 'online' se aktualizoval, ale result je jedna. Já bych však chtěl vrátit/ukázat počet ovlivněných záznamů. |
||
Tomáš123 Profil |
#2 · Zasláno: 28. 3. 2016, 20:56:10
tester:
„ $this->query[0]=='S' “
Čo presne to znamená? Je možné, že sa kvôli vždy splnenej podmienke nedostaneš k jej opačnej vetve. Riadky zmenené UPDATE om sa podľa dokumentácie počítajú práve onou funkciou mysql_affected_rows() .
Skúšal si na detekciu chyby odstrániť zavináč? Neviem, či náhodou nezabráňuje chybovému výstupu z celého riadku. Ako tradične pri kódoch so zastaranými funkciami z rodiny mysql_* sa hodí poznamenať, že budú z PHP odstránené a je vhodné nahradiť ich za rozšírenie MySQLi alebo PDO.
|
||
abc Profil |
#3 · Zasláno: 28. 3. 2016, 22:37:13
Tomáš123:
„ $this->query[0]=='S' “
To je přístup ke stringu jako k poli - [0] vezme první písmeno ze stringu a pokud je S, tedy první slovo je Select ...
tester: Nepřepisuješ si to někde dále? |
||
Kajman Profil |
#4 · Zasláno: 29. 3. 2016, 16:15:53
V případě mysql by update by mělo vrátit nula ovlivněných řádků ve dvou případech.
1. žádný řádek neodpovídá podmínkám ve where 2. původní hodnoty jsou stejné jako nové (ověřte si, že update nepouštíte dvakrát a nekontrolujete ovlivněné řádku až u druhého dotazu) |
||
Časová prodleva: 9 let
|
0