phpbar.de logo

Mailinglisten-Archive

[php] =?iso-8859-1?Q?m=F6glichs?= =?iso-8859-1?Q?t?= einfacher Code

[php] möglichs t einfacher Code

Enrico Weigelt php_(at)_phpcenter.de
Fri, 3 May 2002 16:40:42 +0200


On Fri, May 03, 2002 at 10:15:41AM +0200, Detlef Tiggeler wrote:

Kurze Vorbemerkung:

statt der mysql_xx()-funktionen besser die PEAR::DB-klasse benutzen.
dann ist es nur noch eine frage der URI, welches RDBMS benutzt wird.

ergo: 

$dbh = DB::connect ( $uri, $peristent )
weiteres siehe PEAR-manual.

<snip>

> $notall="";
> 
> if (!$name)    $notall .= "Sie müssen einen Namen angeben !!<br>";
> if (!$iid)     $notall .= "Bitte die Indexzugehörigkeit angeben !!<br>";
> if (!$kuerzel) $notall .= "Sie müssen ein Kuerzel angeben !!<br>";

#1: shortcut evaluation hilft.
#2: fuer umlaute und sonderzeichen gibt es entities.

($name || ($notall .= "Sie m&uuml;ssen einen Namen angeben! <br>"));
...

> if(!$notall){ 
> $abf=mysql_query("select kuerzel,name,name2 from firmen where
> kuerzel='$kuerzel' OR name='$name'");
> $rowcount = mysql_num_rows($abf);
> if($rowcount){
>   ein Eintrag wurde gefunden
>   Behandlungsroutine ausführen
> }else{
>   Eintrag vornehmen
> }
> }else{
> echo $notall;
> exit();
> }

if ($notall)
{
	echo $notall;
	exit;
}
else
{
	$sth = $dbh->query ( "
		SELECT kuerzel, name, name2 FROM firmen WHERE
			kuerzel = '$kuerzel' OR
			name    = '$name' LIMIT 1
		;
		" );
	if ($row = $sth->fetchrow())
	{
		/* === fall1: eintrag schon da === */
	}
	else
	{
		/* === fall2: noch kein eintrag da === *
	}
}

wenn du die daten des existierenden eintrags nicht brauchst,
kannst du auch im select-statement folgendes schreiben:

	SELECT 1 WHERE ... 

das LIMIT 1 sagt dem RDBMS, dass es garnicht nach einem 2.
record suchen soll. sollte IMHO etwas mehr performance bringen,
wobei das bei solch einer einfachen query und der annahme, 
dass du einen ordentlichen index auf der relation liegen hast, 
keinen grossen unterschied machen sollte.

ach ja, zum thema index:

falls du wirklich sicherstellen willst, dass es keine doppel-
eintraege in deiner firmentabelle gibt, solltest du indices 
drauflegen:

CREATE UNIQUE INDEX firmen_i1 ON firmen ( kuerzel );
CREATE UNIQUE INDEX firmen_i2 ON firmen ( name );

~-n

--
 Enrico Weigelt    ==   metux ITS 
 Webhosting ab 5 EUR/Monat. Server-Housing ab 50 EUR/Monat.
 www:     http://www.metux.de/        phone:     +49 36207 519931
 email:   contact_(at)_metux.de            cellphone: +49 174 7066481


php::bar PHP Wiki   -   Listenarchive