Avatar billede yHec Novice
19. oktober 2006 - 23:32 Der er 7 kommentarer og
1 løsning

Pointeren i en mysql_fetch_assoc

Jeg har fået et stort problem. Når jeg kører følgende kode (forkortet), kan jeg ikke trække mere ud af databasen:

<?php do {
  echo $row_Recordset1['Efternavn']."<br />"; <-- Denne er ikke tom.
  while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
echo row_Recordset1['Efternavn'] // <-- denne er tom
?>

Jeg tror det har noget med pointerens placering at gøre! Jeg skal bare have den til at returnere den første række i det associerede array (hvad er ivørigt forskellen på et "almindeligt" array og et associeret array?)

Det er meget irriterende. Jeg har kigget længe og grundigt her: http://dk2.php.net/manual/da/ref.array.php og her: http://dk2.php.net/manual/da/ref.mysql.php uden at blive meget klogere!

Håber I har nogen idéer.

/y
Avatar billede coderdk Praktikant
19. oktober 2006 - 23:51 #1
Det er fordi dit loop fortsætter indtil der ikke er flere rækker. Den hopper først ud af løkken når $row_Recordset1 er false (det returnerer mysql_fetch_assoc hvis der ikke er nogen række at trække ud).

Desuden plejer man ikke at bruge en do/while men en while løkke:

$sql = "SELECT Efternavn FROM tabel";
$qh = mysql_query( $sql ) or die( mysql_error() );
while ( $row = mysql_fetch_assoc( $qh ) )
{
  echo $row['Efternavn'];
}
Avatar billede coderdk Praktikant
19. oktober 2006 - 23:52 #2
Evt. hvis du vil lave en besked om at der ikke er nogen rækker:

$sql = "SELECT Efternavn FROM tabel";
$qh = mysql_query( $sql ) or die( mysql_error() );
if ( mysql_num_rows( $qh ) > 0 )
{
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
    echo $row['Efternavn'];
  }
}
else
{
  echo "Ingen rækker...";
}
Avatar billede well_r Nybegynder
19. oktober 2006 - 23:56 #3
http://dk2.php.net/manual/da/function.mysql-fetch-array.php
http://dk2.php.net/manual/da/function.mysql-fetch-assoc.php

sådan som jeg har forstået det betyder assoc bare den måde som tingene skal sættes op på. som standard vil det være MYSQL_BOTH som bliver valgt... altså..
mysql_fetch_assoc = mysql_fetch_array($res, MYSQL_ASSOC).

det betyder at ud med assoc SKAL bruge kolonnenavne, hvor du med alm. array normalt kan bruge både INDEX eller navne.
en tilsvarende funktion KUN til index vil være MYSQL_NUM

Jeg plejer personligt bare at bruge array (dvs BOTH).. prøv det til at starte med, og sæt evt. nogle or die ind
Avatar billede well_r Nybegynder
19. oktober 2006 - 23:57 #4
nevermind mit svar. burde være kommentar
Avatar billede yHec Novice
20. oktober 2006 - 00:11 #5
Alt det jeg godt klar over! Mit problem er, at efter do..while, står pointeren ved enden af arrayet, hvilket gør, at jeg ikke kan hente data ud. Det er det jeg gerne vil være i stand til. SQL'en er en INNER JOIN, så row_Recordset1['Efternavn'] er den samme i samtlige rækker.

Så hvordan får jeg php til at hoppe tilbage til begyndesen af $Recordset1, efter den har afviklet do..while?

/y

/y
Avatar billede coderdk Praktikant
20. oktober 2006 - 00:17 #6
Det kan du ikke. Så skal du i stedet gemme dine resultater, f.eks. med:

$sql = "SELECT Efternavn FROM tabel";
$qh = mysql_query( $sql ) or die( mysql_error() );
$result = array();
while ( $row = mysql_fetch_assoc( $qh ) )
{
  $result[] = $row;
}

Så er alle rækker i $result-array'et, som du kan bruge for/foreach osv på hvis du har lyst.
Avatar billede yHec Novice
20. oktober 2006 - 00:28 #7
Det tænkte jeg nok!!!

Det er det jeg har gjort - dog med individuelle vars ($efter=$row_Recordset1['Fornavn'], $for=$row_Recordset1['Fornavn'])

Tak for hjælpen

Vi du have point?

/y
Avatar billede coderdk Praktikant
20. oktober 2006 - 00:44 #8
Ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester