PDO geeft bij een bepaalde sql geen waarde
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)
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
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
}
}
?>
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
Ik moest de SQL veranderen in:
Code (php)
1
2
3
4
5
6
7
8
9
10
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
$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