Autor Zpráva
tester
Profil *
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
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é UPDATEom 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
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
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)

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