user2363542
user2363542

Reputation: 51

How to return a COUNT(*) results from a query PHP

public function votesThisMonth()
{
    $this->query = $this->pdo->prepare
    ("
        SELECT
            COUNT(*) AS num_votes
        FROM
            votes
        WHERE
            YEAR(year) = YEAR(CURRENT_DATE)
        AND MONTH(month) = MONTH(CURRENT_DATE)
    ");
    $result = $this->query->execute();

    return $result['num_votes'];
}

I want to return ALL rows that are on year 2013 and month 5. But it returns '1' while I have 10+ rows with the same data?

What did I do wrong?

These are the rows that are located in my database:

id  ip          year    month
1   127.0.0.1   2013    5
2   127.0.0.1   2013    5
3   127.0.0.1   2013    5
4   127.0.0.1   2013    5
5   127.0.0.1   2013    5
6   127.0.0.1   2013    5
7   127.0.0.1   2013    5
8   127.0.0.1   2013    5
9   127.0.0.1   2013    5
10  127.0.0.1   2013    5
11  127.0.0.1   2013    5
12  127.0.0.1   2013    5
13  127.0.0.1   2013    5
14  127.0.0.1   2013    5
15  127.0.0.1   2013    5

EDITED MY METHOD PLEASE LOOK:

    public function votesThisMonth()
    {
        $this->query = $this->pdo->prepare
        ("
            SELECT
                *
            FROM
                votes
            WHERE
                YEAR(year) = YEAR(CURRENT_DATE)
            AND MONTH(month) = MONTH(CURRENT_DATE)
        ");
        $this->query->execute();

        return $this->query->rowCount();
    }

This returns '0', why?

Upvotes: 2

Views: 166

Answers (3)

Orangepill
Orangepill

Reputation: 24645

The query should be

SELECT * FROM votes
WHERE `year`  = YEAR(CURRENT_DATE)
  AND `month` = MONTH(CURRENT_DATE) 

Upvotes: 2

Jan Turoň
Jan Turoň

Reputation: 32912

year and month are keywords, regardless the case, so wrap them in backticks

public function votesThisMonth()
{
    $this->query = $this->pdo->prepare
    ("
        SELECT
            COUNT(*) AS num_votes
        FROM
            votes
        WHERE
            `year` = YEAR(CURRENT_DATE)
        AND `month` = MONTH(CURRENT_DATE)
    ");
    $result = $this->query->execute();

    return $result['num_votes'];
}

Upvotes: 1

Hazem Mohamed
Hazem Mohamed

Reputation: 564

You should do it as following

public function votesThisMonth()
{
    $this->query = $this->pdo->prepare
    ("
        SELECT
            COUNT(*) AS num_votes
        FROM
            votes
        WHERE
            YEAR(year) = YEAR(CURRENT_DATE)
        AND MONTH(month) = MONTH(CURRENT_DATE)
    ");
    $this->query->execute();
    $result = $this->query->fetch(PDO::FETCH_ASSOC);

    return $result['num_votes'];
}

Upvotes: 0

Related Questions