Jump to content
Just nu i M3-nätverket

skum recordset?


osvaldor

Recommended Posts

Jag har ställt en fråga i MySQL som jag först har testat i CocoaMySQL för att se att frågan resulterar i det jag vill ha. So far so good. När jag kopierar samma fråga till en php sida, där jag får 3 rader som resultat i CocoaMySQL, så får jag bara ut 2 rader i php... ngn som vet vad det kan bero på? Jag har verkligen kollat så att koden stämmer...

Link to comment
Share on other sites

Jag är förvisso också nybörjare i mysql/php men om jag får se koden kanske jag kan hjälpa dig.

Problemet är alltså att jag inte får ut den första raden i recordsetet, inte första raden i databasen utan första raden som ska presenteras.. så här ser koden ut:

 

$open = mysql_connect("localhost", " ", " ");

$query = mysql_db_query("cv", "SELECT DISTINCT log_date,usr_fullName FROM wd_usr_user_tb usr,wd_log_log_tb log WHERE usr.usr_level < 2 AND usr.usr_id = log.usr_id ORDER BY log_date DESC");

$rs = mysql_fetch_array ($query);

 

if (empty($rs)) {

echo "There are no present records.";

mysql_free_result($rs);

mysql_close($open);

} else {

while ($rs = mysql_fetch_array ($query)) {

print $rs["usr_fullName"] . " ";

print $rs["log_date"];

print ("<br>");

}

mysql_free_result($rs);

mysql_close($open);

}

Link to comment
Share on other sites

Problemet är alltså att jag inte får ut den första raden i recordsetet, inte första raden i databasen utan första raden som ska presenteras.

Hmm...ta det där en gång till. Menar du att php returnerar alla rader ur tabellen, som svarar på frågan, utom den första raden ?

Link to comment
Share on other sites

Problemet är alltså att jag inte får ut den första raden i recordsetet, inte första raden i databasen utan första raden som ska presenteras.

Hmm...ta det där en gång till. Menar du att php returnerar alla rader ur tabellen, som svarar på frågan, utom den första raden ?

japp, jag testar frågan i CocoaMySQL och får ut 4 rader... sen kopierar jag frågan, klistrar in den i php o kör... vad blir resultatet? Jo 3 rader.. och det är första raden i resultatet, inte i databasen, som inte hänger med =(

Link to comment
Share on other sites

Hmm...verkar helskumt. Jag kan inte heller hitta några fel i din kod. Är du säker på att du skriver samma fråga i CocoaMySql ? Annars kan du ju slänga ut frågan på www.phportalen.net Där är det tätt mellan riktiga php-proffs i forumen...

Link to comment
Share on other sites

Nils Holmlöv
$open = mysql_connect("localhost", " ", " ");

$query = mysql_db_query("cv", "SELECT DISTINCT log_date,usr_fullName FROM wd_usr_user_tb usr,wd_log_log_tb log WHERE usr.usr_level < 2 AND usr.usr_id = log.usr_id ORDER BY log_date DESC");

$rs = mysql_fetch_array ($query);

 

if (empty($rs)) {

echo "There are no present records.";

mysql_free_result($rs);

mysql_close($open);

} else {

while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

}

mysql_free_result($rs);

mysql_close($open);

}

Du använder mysql_fetch_array två gånger i koden (markerat i rött). Varje gång du använder den funktionen flyttas pekaren i vektorn (array:en) fram ett snäpp. När du startar din while-loop kommer pekaren att peka på rad två, istället för rad ett.

Link to comment
Share on other sites

En annan synpunkt, som förvisso inte har med problemet att göra, är att i villkorssatsen skriver du två rader som ska köras vare sig vilkoret uppfylls eller inte. Då är det effektivare och tydligare att köra raderna efter (utanför) villkorssatsen:

 

if (empty($rs)) {

echo "There are no present records.";

mysql_free_result($rs);

mysql_close($open);

} else {

while ($rs = mysql_fetch_array ($query)) {

print $rs["usr_fullName"] . " ";

print $rs["log_date"];

print ("<br>");

}

mysql_free_result($rs);

mysql_close($open);

}

Link to comment
Share on other sites

En annan synpunkt, som förvisso inte har med problemet att göra, är att i villkorssatsen skriver du två rader som ska köras vare sig vilkoret uppfylls eller inte. Då är det effektivare och tydligare att köra raderna efter (utanför) villkorssatsen:

 

if (empty($rs)) {

  echo "There are no present records.";

  mysql_free_result($rs);

  mysql_close($open);    

} else {

  while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

  }

mysql_free_result($rs);

mysql_close($open);

}

insåg det med lite hjälp av moderatorn på phpportalen =)

Link to comment
Share on other sites

$open = mysql_connect("localhost", " ", " ");

$query = mysql_db_query("cv", "SELECT DISTINCT log_date,usr_fullName FROM wd_usr_user_tb usr,wd_log_log_tb log WHERE usr.usr_level < 2 AND usr.usr_id = log.usr_id ORDER BY log_date DESC");

$rs = mysql_fetch_array ($query);

 

if (empty($rs)) {

   echo "There are no present records.";

   mysql_free_result($rs);

   mysql_close($open);

} else {

   while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

   }

mysql_free_result($rs);

mysql_close($open);

}

Du använder mysql_fetch_array två gånger i koden (markerat i rött). Varje gång du använder den funktionen flyttas pekaren i vektorn (array:en) fram ett snäpp. När du startar din while-loop kommer pekaren att peka på rad två, istället för rad ett.

man tackar! =) fick samma proffisga svar från dig som från andra! =) Vad skulle man göra utan alla vänliga själar..?

Link to comment
Share on other sites

En annan synpunkt, som förvisso inte har med problemet att göra, är att i villkorssatsen skriver du två rader som ska köras vare sig vilkoret uppfylls eller inte. Då är det effektivare och tydligare att köra raderna efter (utanför) villkorssatsen:

 

if (empty($rs)) {

  echo "There are no present records.";

  mysql_free_result($rs);

  mysql_close($open);    

} else {

  while ($rs = mysql_fetch_array ($query)) {

      print $rs["usr_fullName"] . " ";

      print $rs["log_date"];

      print ("<br>");

  }

mysql_free_result($rs);

mysql_close($open);

}

jag tänkte faktiskt sriva så som du har gjort, men sen kom jag på att det inte skulle funka iom att man tilldelar variabeln $rs ett värde i while-loopen och inte tidigare. Den första if-satsen att alltid att gälla och då kommer man inte att få ut ngt resultat avsett...

Link to comment
Share on other sites

Nils Holmlöv
jag tänkte faktiskt sriva så som du har gjort, men sen kom jag på att det inte skulle funka iom att man tilldelar variabeln $rs ett värde i while-loopen och inte tidigare. Den första if-satsen att alltid att gälla och då kommer man inte att få ut ngt resultat avsett...

Jag antar att du vill veta hur många rader det är i ditt record-set, eller i varje fall veta att det inte är tomt. Använd funktionen mysql_num_rows istället.

Link to comment
Share on other sites

jag tänkte faktiskt sriva så som du har gjort, men sen kom jag på att det inte skulle funka iom att man tilldelar variabeln $rs ett värde i while-loopen och inte tidigare. Den första if-satsen att alltid att gälla och då kommer man inte att få ut ngt resultat avsett...

Jag antar att du vill veta hur många rader det är i ditt record-set, eller i varje fall veta att det inte är tomt. Använd funktionen mysql_num_rows istället.

Det var EXAKT vad jag var ute efter, tack! :)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...