Hallo,

Ik probeer data uit een datebase te halen.
Hiervoor maak ik gebruik van PDO.
Nu is alleen het probleem dat hij niks terug geeft.
Hieronder staat mij code.
hij doet het wel goed als '$this->bforHomePage' true is.
Als hij false is krijg ik niks terug (ook geen error).
De 2 argumenten van de hoofd functie ($pStartDate en $pEndDate) bevatten een waarde, want bij een echo geeft hij bijvoorbeeld '2009-12-21'.
Als ik in de sql de ':startDate' en ':endDate' vervang door echt waardes (dus zonder gebruik te maken van de bindParam() functie), dan werkt hij wel.
Het zelfde geld als ik de sql in phpMyAdmin plaats en de de ':startDate' en ':endDate' vervang door de datums die ik in de functie mee geef, dan geeft hij resultaat terug.
 <?php
public function datebaseToGame($pStartDate = null, $pEndDate = null) {
        $this->pDatabase->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = null;
        if($this->bforHomePage) { // dit gedeelte doet hij goed.
            $weeknumber = $this->calcWeekNumber();
            $sql = "SELECT *, UNIX_TIMESTAMP(date_time) AS timestamp, WEEKOFYEAR(date_time) AS week
                        FROM games_game
                        INNER JOIN games_opponent
                        ON games_game.opponent_ID = games_opponent.opponent_ID
                        WHERE YEARWEEK(date_time, 3) = :weeknum
                        ORDER BY  `games_game`.`team` ASC ";
            $stmt = $this->pDatabase->prepare($sql);
            $stmt->bindParam(':weeknum', $weeknumber, PDO::PARAM_INT);
        }else { // hier geeft hij niks terug
             // Controleren of de 2 parameters, datums zijn.
            if(!preg_match('/^(19|20)\d{2}[-](0?[1-9]|1[0-2])[-](0?[1-9]|[12][0-9]|3[01])$/', $pStartDate) || $pStartDate == null) $pStartDate = date('Y-m-d');
            if(!preg_match('/^(19|20)\d{2}[-](0?[1-9]|1[0-2])[-](0?[1-9]|[12][0-9]|3[01])$/', $pEndDate) || $pEndDate == null) $pEndDate = date('Y-m-d');
            // De SQL die het niet doet
            $sql = "SELECT *, UNIX_TIMESTAMP(date_time) AS timestamp, WEEKOFYEAR(date_time) AS week
                        FROM games_game
                        INNER JOIN games_opponent
                        ON games_game.opponent_ID = games_opponent.opponent_ID
                        WHERE DATE(`date_time`) >= ':startDate'
                        AND DATE(`date_time`) <= ':endDate'
                        ORDER BY `games_game`.`team` ASC ";
            $stmt = $this->pDatabase->prepare($sql);
            $stmt->bindParam(':startDate', $pStartDate, PDO::PARAM_STR);
            $stmt->bindParam(':endDate', $pEndDate, PDO::PARAM_STR);
        }
        $stmt->execute();
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        foreach($result as $row) {
                 //rest van de code
   }
}
?>

Ik denk zelf dat het door de functie bindParam() komt, dat hij de opgeven waarde veranderd (waarschijnlijk iets verkeert opgeschreven of vergeten).

Hopelijk is mij probleem duidelijk en kunnen jullie mij helpen!
Alvast bedankt
Ik heb de fout al gevonden.
Ik moest de SQL veranderen in:
[code]<?php
$sql = "SELECT *, UNIX_TIMESTAMP(date_time) AS timestamp, WEEKOFYEAR(date_time) AS week
FROM games_game
INNER JOIN games_opponent
ON games_game.opponent_ID = games_opponent.opponent_ID
WHERE DATE(`date_time`) >= :startDate
AND DATE(`date_time`) <= :endDate
ORDER BY `games_game`.`team` ASC ";
?>[code]
dus geen '' om :startDate en :endDate

Reageren