PDO geeft bij een bepaalde sql geen waarde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Roy

roy

21/12/2009 18:58:00
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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
Gewijzigd op 01/01/1970 01:00:00 door Roy
 
PHP hulp

PHP hulp

15/11/2024 10:02:30
 
Roy

Roy

23/12/2009 12:13:00
Quote Anchor link
Ik heb de fout al gevonden.
Ik moest de SQL veranderen in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?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 "
;
?>

dus geen '' om :startDate en :endDate
Gewijzigd op 01/01/1970 01:00:00 door Roy
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.