Numrows er lig 0 ?

Tags:    mysqli php

<< < 12 > >>
Hej.

ER igang med at lave et lille paginationsystem, men har problemer med min numrows..

Kode:
Fold kodeboks ind/udKode 



Som sagt giver $num_rows 0, selvom at jeg ved den bør være også 15.

Hvad er fejlen?

På forhånd tak for hjælpen :)



13 svar postet i denne tråd vises herunder
4 indlæg har modtaget i alt 16 karma
Sorter efter stemmer Sorter efter dato
har du prøvet at bytte om på
$stmt->bind_param('i', $topic_id);
$topic_id = $_GET['id'];

sådan dit $topic_id bliver sat før du bruger det :)

$topic_id = $_GET['id'];
$stmt->bind_param('i', $topic_id);



når du laver en COUNT() så tæller den antallet af rækker og returnerer det som én række. Derfor er numrows = 1 korrekt.

Prøv at køre dit SQL statement på databasen (gennem mysql workbench eller phpmyadmin) så kan du se hvad du kan forvente.



Indlæg senest redigeret d. 20.04.2012 18:29 af Bruger #17015
@Jacob, læs: http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

Du har vidst ikke forstået hvordan COUNT() fungerer.

COUNT(): returnerer antallet af rækker i dit resultat: altså, den returnerer kun én række. Med mindre du bruger GROUP BY fx.

mysql_num_rows og lignende funktioner: returnerer antallet af rækker i dit resultat - altså IKKE værdien af COUNT().

mysql_num_rows på et select count(*)-something statement uden GROUP BY vil ALTID returnere 1. Upåagtet hvad værdien af kolonnen count(*) i din ene resultat række i så fald er.

- Sorry for dobbelt post - kunne ikke se Kenneths svar, da jeg skrev mit.



Indlæg senest redigeret d. 20.04.2012 18:40 af Bruger #17015
hov, kom da lige til at læse din query, du vælger kun 1 række ud, nemlig antal rækker (da du bruger count)
SELECT COUNT(*) FROM posts WHERE post_topic = ?

du vil få return
rows:
1: 20

hvis du tæller antal rækker du får retur er det 1, da du kun har hentet en ud.

præcis som Gustav skrev.



nu bruger jeg ikke selv mysqli, men vil tror det er pga mysqli_stmt_num_rows.

prøv at lav
$num_rows = mysqli_stmt_num_rows($stmt);
om til
$num_rows = $stmt->num_rows;




JEg har prøvet det, men $num_rows er stadig 0 :)



+1 for Kenneth's løsnings forslag :D



Det er desværre forkert - håber på en måde at indlægget bliver stemt ned igen(Ikke for jeg ikke vil give credit for forsøget), men da det er helt forkert. Det er netop meningen, at man kan skal kunne binde værdierne efter :)

Hmm.. det må være noget med prepare.. Kan måske ikke bruges i denne sammenhæng..

Hmm.. Deteneste jeg lige kan dokumentere min påstand med er dette, http://www.eksperten.dk/guide/1480




Indlæg senest redigeret d. 20.04.2012 18:06 af Bruger #15747
Hmm.. Jeg kan dog fortælle at det andet virker i praktisk, jeg skal dog ikke sige om det ene er mere rigtigt end det andet, selvom det virker mere logisk din forklaring.

Dog er det det desværre ikke løsningen på dette problem, selvom det nok er rigtigt(Jeg var måske nok lidt for hurtigt ude med at sige, at det var forkert - det beklager jeg).

Jeg er kommet frem til noget andet, hvor $num_rows = 1, men det er stadig ikke helt rigtigt.

Kode:
Fold kodeboks ind/udKode 




<< < 12 > >>
t