PDO Where .. like?
`Hoi,
Ik heb de volgende code:
Deze query geeft nu helaas geen resultaten terug. Wat doe i kfout?
Ik heb de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
public function findOutbreakByName($naam)
{
$query = "SELECT e.epi_id, e.ecat_id, ec.naam AS cat_naam, e.naam, e.oorsprong, e.wereld_besmettingen, e.wereld_doden, e.nl_besmettingen, e.nl_doden, e.incubatie, e.besmetting, e.symptonen, e.remedie, e.informatie, e.periode_van, e.periode_tot FROM epidemie e INNER JOIN epidemie_categorie ec ON (e.ecat_id = ec.ecat_id) WHERE e.naam LIKE '%:naam%' ORDER BY e.naam ASC";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':naam', $naam);
$stmt->execute();
if($stmt->rowCount() < 1)
throw new InvalidOutbreakException ('Geen resultaten gevonden');
return $this->fetchAll($stmt);
}
?>
public function findOutbreakByName($naam)
{
$query = "SELECT e.epi_id, e.ecat_id, ec.naam AS cat_naam, e.naam, e.oorsprong, e.wereld_besmettingen, e.wereld_doden, e.nl_besmettingen, e.nl_doden, e.incubatie, e.besmetting, e.symptonen, e.remedie, e.informatie, e.periode_van, e.periode_tot FROM epidemie e INNER JOIN epidemie_categorie ec ON (e.ecat_id = ec.ecat_id) WHERE e.naam LIKE '%:naam%' ORDER BY e.naam ASC";
$stmt = $this->db->prepare($query);
$stmt->bindParam(':naam', $naam);
$stmt->execute();
if($stmt->rowCount() < 1)
throw new InvalidOutbreakException ('Geen resultaten gevonden');
return $this->fetchAll($stmt);
}
?>
Deze query geeft nu helaas geen resultaten terug. Wat doe i kfout?
Gesponsorde koppelingen:
foutafhandeling ontbreekt!
stop 'm in een try, met de volgende catch:
Dat heb ik..
Dan krijg ik dus de exception "Geen resultaten"
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php try
{
$outbreak = new OutbreakController($db);
$results = $outbreak->findOutbreakByName($_POST['naam']);
echo '<table cellspacing="0" width="100%" id="epidemie">';
echo '<tr>';
echo '<td class="cat_table_title">Naam</td>';
echo '<td class="cat_table_title">Oorsprong</td>';
echo '<td class="cat_table_title">Periode</td>';
echo '</tr>';
foreach($results as $row)
{
echo '<tr>';
echo '<td><a href="/id/'.$row['epi_id'].'/">'.$row['naam'].'</a></td>';
echo '<td>'.$row['oorsprong'].'</td>';
echo '<td>'.(!empty($row['periode_van']) ? $row['periode_van'] : 'Onbekend').' - '.(!empty($row['periode_tot']) ? $row['periode_tot'] : 'Onbekend').'</td>';
echo '</tr>';
}
echo '</table>';
}
catch(Exception $e)
{
echo $e->getMessage();
} ?>
{
$outbreak = new OutbreakController($db);
$results = $outbreak->findOutbreakByName($_POST['naam']);
echo '<table cellspacing="0" width="100%" id="epidemie">';
echo '<tr>';
echo '<td class="cat_table_title">Naam</td>';
echo '<td class="cat_table_title">Oorsprong</td>';
echo '<td class="cat_table_title">Periode</td>';
echo '</tr>';
foreach($results as $row)
{
echo '<tr>';
echo '<td><a href="/id/'.$row['epi_id'].'/">'.$row['naam'].'</a></td>';
echo '<td>'.$row['oorsprong'].'</td>';
echo '<td>'.(!empty($row['periode_van']) ? $row['periode_van'] : 'Onbekend').' - '.(!empty($row['periode_tot']) ? $row['periode_tot'] : 'Onbekend').'</td>';
echo '</tr>';
}
echo '</table>';
}
catch(Exception $e)
{
echo $e->getMessage();
} ?>
Dan krijg ik dus de exception "Geen resultaten"
Gewijzigd op 24/07/2010 17:52:26 door Roeltje M
Ik mis de Query in de try, maar misschien heb je die erbuiten geplaatst of is deze te vinden in de OutbreakController klasse.
Kijk eens of je de Query kan versimpelen, dus gewoon: SELECT * FROM database en kijk eens of je dan wel resultaat krijgt. Vervolgens ga je de * vervangen door de door jou op te vragen data zonder AS, die test je weer, dan stop je de WHERE of LIKE erin, en pas daarna de AS, dan weet je namelijk waar het fout gaat!
Succes!
Kijk eens of je de Query kan versimpelen, dus gewoon: SELECT * FROM database en kijk eens of je dan wel resultaat krijgt. Vervolgens ga je de * vervangen door de door jou op te vragen data zonder AS, die test je weer, dan stop je de WHERE of LIKE erin, en pas daarna de AS, dan weet je namelijk waar het fout gaat!
Succes!
probeer eens ipv bindParam;
Uiteraard in je query even aanpassen:
LIKE '%:naam%'...
naar
LIKE :naam
Uiteraard in je query even aanpassen:
LIKE '%:naam%'...
naar
LIKE :naam
Ik ben een newbee in php/mysql weet wel wat van ansi-sql maar die dubbele punt bij :naam is dat goed ?
Aad B op 29/07/2010 20:13:58:
Ik ben een newbee in php/mysql weet wel wat van ansi-sql maar die dubbele punt bij :naam is dat goed ?
:naam is een placeholder die door de SQL statement wordt vertaald in een waarde op het moment dat execute() wordt aangeroepen.
Oplossing van Jurgen Werkt!! Bedankt ;)



