23. januar 2007 - 12:43Der er
15 kommentarer og 2 løsninger
Henter kun et brugernavn op fra databasen.
hejsa jeg har lavet følgene kode. men den viser kun det første brugernavn fra databasen. jeg har prøvet at få det til at virke med en Mysql_fetch_array, men det fungere ikke
<?php
include_once("sql.php");
echo "<center><h3>Bruger</h3></center>";
function visbruger () {
$hentet = sql("select * from brugenavn"); $dbbrugernavn = $hentet["Brugernavn"];
echo "</ br>". $dbbrugernavn;
}
visbruger();
?>
------------------sql.php-----------------------
<?php
function sql($sql) { $forbindelse = mysql_connect("localhost","root","");
mysql_select_db("opgman",$forbindelse);
$result = mysql_query($sql,$forbindelse) or die (mysql_error());
while ($row = mysql_fetch_array($result)) { return $row; }
Men det gør den jo ikke når du returner - det afslutter funktionen, hvilket gør at du kun henter den første række, og ikke kommer til andet.
Du er nødt til at bruge en SEPERAT funktion til at hente rækkerne, eller hente alle rækker ud i et array og returnere dette - men den sidstnævnte løsning er ikke holdbar, da det kræver rimelig meget hukommelse.
Det ville ganske enkelt være et kald til mysql_fetch_array med dit resultatsæt (dvs. det mysql_query returnerer) som parameter. Det kræver dog naturligvis at du gemmer dette et eller andet sted, og hvis du ikke kan blive færdig med at behandle data fra en query før du går i gang med en ny, så skal du sørge for at du har en måde at skelne mellem det på.
Af den grund vil jeg sådan set også foreslå dig at du dropper den sql()-funktion helt og går tilbage til den mere "manuelle" måde at gøre tingene på ved at skrive mysql_query m.v. direkte - det er måske lidt mere kode du skal skrive, men det andet kan ikke betale sig med mindre man har gjort sig seriøse tanker om databaseabstraktion, og vil gøre det let at skifte fra eks. MySQL til MSSQL - der bør man dog snarere lave en wrapper for hver funktion.
Bemærk også at det er spild af tid at kalde mysql_connect mere end en enkelt gang pr. script - kald den EN gang, og gem din reference så du kan genbruge den i resten af scriptet.
men som pidgeot siger er der jo ingen ting at spare da funktionen allerede er lavet i php, det vil kun koste ekstra tid at kalde din egen funktion også...
Præcist, dog skal mysql_connect og mysql_select_db kaldes hver for sig, da mysql_select_db ikke returnerer forbindelsen. (Alternativt kan man udnytte at PHP selv bruger den sidst oprettede forbindelse hvis man ikke angiver den i mysql_query, men det er ikke en specielt god ide, da dette eksempelvis ikke gælder for deres forbedrede MySQL-funktioner, mysqli.)
okay så gør jeg bare sådan... hvornår er det så smart at bruge sådan en function jeg started med at vise ? er det kun hvis man skal lave en rigtig stor side ?
1) Skal abstrahere fra hvilken database du bruger (fordi du ikke ved hvilken der skal bruges, eller hvis du vil have mulighed for at skifte uden at skulle rette i alle filer), eller 2) Sørger for ekstra funktionalitet der hjælper kraftigt med udvikling, eksempelvis parameterisering af queries (så du får dine funktioner til at håndtere indsættelse af variable i din SQL, dvs. alt lige fra at sætte apostroffer udenom strenge til at escape data så SQL injections umuliggøres)
Derudover skal sådanne funktioner naturligvis også laves med omhu, så de ikke laver mere end de rent faktisk skal - dvs. en funktion til at connecte, en funktion til at sende selve queryen afsted, og en til at hente den næste række i et resultatsæt.
Samtidigt er det en stor fordel at lave den slags i klasser, da dette blandt andet lader dig bestemme hvad man må og ikke må med den, og giver dig muligheden for at sikre at alle de databaseklasser du skriver rent faktisk indeholder de funktioner dit system skal bruge.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.