PHP/SQL - Rijen weergeven gemaakt na een bepaalde datum

Ik heb klassen Rankings en DateFilter gemaakt.

Elke classificeringsklasse heeft een klasse DateFilter die de cutoff-datum moet produceren. Ik probeer een filter te kunnen maken zodat alles dat na die datum is gemaakt in een tabel wordt weergegeven.

De vergelijking werkt echter niet. Zie je een probleem?

Dit is mijn DateFilter-klasse:

<?php

include ("Filter.php");

class DateFilter extends Filter
{
    //@param daysOld: how many days can be passed to be included in filter
    //Ex. If daysOld = 7, everything that is less than a week old is included
    private $interval;

    public function DateFilter($daysOld)
    {
        $this->interval = new DateInterval('P'.$daysOld.'D');
    }

    //@Return: Returns a DateTime that is the earliest possible date to be included in the filter
    function createLimitDate()
    {
        $now = new DateTime();
        return $now->sub($this->interval);
    }

    //generates SQL code for checking date
    //Ex. WHERE limitDate > created... if > means before
    function genSQL()
    {
        $limitDate = $this->createLimitDate();

        return $limitDate->format('Y-m-d') . " < 'created'";
    }
}
?>

En mijn klassementsklasse:

<?php

class Rankings 
{
    private $filter;

    //@params: $filty is the filter given to these rankings
    public function Rankings($filty)
    {
        $this->filter = $filty;
    }

    //@return: returns the html code for the rankings
    public function display()
    {
        echo '<table border="1" align="center">'.
                    '<tr align="center" style="font-weight:bold;">
                        <td>#</td><td>NAME</td><td>Date</td>
                    </tr>
                    ';

            //hardcoding DB
            $where = $this->filter->genSQL();

            $qry = mysql_query("SELECT * FROM  `pix` 
                                WHERE $where
                                ");
                if (!$qry)
                    die("FAIL: " . mysql_error());

            $i = 1;
            while($row = mysql_fetch_array($qry))
            {
                $name = $row['uniquename'];
                $created = $row['created'];
                echo ' <tr>
                            <td>'. $i . '</td>'.
                            '<td>' . $name . '</td>'.
                            '<td>'. $created . '</td>'.
                        '</tr>';

                $i += 1;
            }

            echo '</table>';
            echo $where;
    }
}
?>

Ik noem het zo:

$test = new DateFilter(100);

$rankings = new Rankings($test);
$rankings->display();

In dat voorbeeld wordt niets weergegeven, hoewel ik zeker weet dat alles in mijn database minder dan 100 dagen geleden is geüpload.

0

1 antwoord

Voer enkele aanhalingstekens in rond de datum die u doorgeeft aan MySQL en plaats de aanhalingstekens rond uw kolomnaam:

return "'" . $limitDate->format('Y-m-d') . "' < created";
1
toegevoegd