Autor Zpráva
Návštěvník
Profil *
Mám jednu třídu, která měla původně obsluhovat jenom příkaz select. Ale nyní jsem se ji rozhodl rozříšit na insert. Uvedu tu jen podstatnou část:

function do_mysql()
{
if(!$rs = mysql_query($this->query)):
  $offset = strpos($this->query, ' ');
  $command = substr($this->query, 0, $offset); 
  die("<b>Mysql $command error: </b>".mysql_error());
    endif;

while($row = mysql_fetch_assoc($rs))
      $this->data[] = $row;

return empty($this->data) ? false : true;
}

Nyní jsem zjistil na řádku s while ... mysql_fetch_assoc že se spouští automaticky tento příkaz pro extrahování dat a já bych potřeboval nějak rozlišit jestli jsem právě vykonal select nebo insert nebo co... Podle čeho to mohu zjistit? Mohl bych to sice vytáhnout z $this->query ale třeba existuje jiný lepší způsob?
Alphard
Profil
mysql_num_rows()
Ještě jsem vám nepsal, že s extenzí mysql_* se do budoucna nepočítá? Je docela rozumné používat pro přístup k db nějaku vrstvu, ale není rozumné stavět ji na mysql_* funkcích.
Návštěvník
Profil *
Alphard:
Jo no, to budu muset později přepsat, teď to dělám apoň v tom co je mi bližší.
Alphard
Profil
Návštěvník:
Existují také hotové vrstvy pro přístup k databázi, třeba dibi. Vlastní řešení je dobré psát až po získání určitých zkušeností.
Návštěvník
Profil *
ten mysql_num_rows mi ale při selectu vrací
mysql_num_rows(): supplied argument is not a valid MySQL result resource

if(!$rs = mysql_query($this->query)):
  $offset = strpos($this->query, ' ');
  $command = substr($this->query, 0, $offset); 
  die("<b>Mysql $command error: </b>".mysql_error());
endif;

$result = mysql_num_rows($rs);
$result = $result?$result:false;



padron je to při insertu


Našel jsem:
This command is only valid for statements like SELECT or SHOW that return an actual result set. To retrieve the number of rows affected by a INSERT, UPDATE, REPLACE or DELETE query, use mysql_affected_rows().

Jak to teda vyřešit mám použít @$result = mysql_num_rows($rs) ?
Alphard
Profil
Tak to se omlouvám, nevěděl jsem, že ta funkce generuje chybovou hlášku. Čekal jsem, že vrátí nula nebo false. Možná bude lepší pomocí textových funkcí ze samotného dotazu zjistit, jestli je to select, show nebo něco jiného. Nicméně jestli nemáte problém s potlačováním chyb, tak ten váš nápad
$count = (int) @mysql_num_rows($rs);
bude fungovat taky. Výsledek má smysl procházet jen když je $count > 0.

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: