| Autor | Zpráva | ||
|---|---|---|---|
| Návštěvník Profil * |
#1 · Zasláno: 31. 1. 2014, 18:21:33
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 |
#2 · Zasláno: 31. 1. 2014, 18:26:43
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 * |
#3 · Zasláno: 31. 1. 2014, 18:47:42
Alphard:
Jo no, to budu muset později přepsat, teď to dělám apoň v tom co je mi bližší. |
||
| Alphard Profil |
#4 · Zasláno: 31. 1. 2014, 18:54:21
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 * |
#5 · Zasláno: 31. 1. 2014, 18:58:15 · Upravil/a: Návštěvník
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 |
#6 · Zasláno: 31. 1. 2014, 19:51:49
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); $count > 0.
|
||
|
Časová prodleva: 12 let
|
|||
0