[PDO-OOP]Record pagina script...
Ik ben nu een class aan het schrijven voor het ophalen van de gegevens uit de database voor een occasion script(Het is een pagina class script-verdeeld de resultaten over meerdere pagina's met in de url ?page=1).
In de class pgNav heb ik PDO erbij geextend(dus class pgNav exten PDO). Nu werkt de connectie en heb ik al een werkende sql voor het tellen van de aantals records, maar nu werkt er een stukje niet goed. Het is een SELECT met ORDER BY en een LIMIT voor het pakken van de uiteindelijke gegevens op de pagina:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
public function getContentArray()
{
//$iOffset = ($this->CurrentPage - 1) * $this->iRows;
//$query = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$this->iRows.' OFFSET '.$iOffset.';';
//$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
//$query = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$stmt = parent::prepare($query);
$stmt->execute();
$aContent = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $aContent;
?>
}
public function getContentArray()
{
//$iOffset = ($this->CurrentPage - 1) * $this->iRows;
//$query = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$this->iRows.' OFFSET '.$iOffset.';';
//$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
//$query = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$stmt = parent::prepare($query);
$stmt->execute();
$aContent = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $aContent;
?>
}
Hoe kan ik dit stuk werkend krijgen? Ik krijg gewoon niks te zien als ik het print_r plaats. Ik heb al verschillende dingen geprobeerd zonder resultaat. En is het verplicht om de prepare() gedeelte t edoen als je gebruik wil maken van fetchAll()?
Alvast bedankt, Ilyes
Gewijzigd op 01/01/1970 01:00:00 door DDragonz
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$sth = parent::query($sql);
$aContent = parent::$sth->fetchAll();
return $aContent;
?>
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$sth = parent::query($sql);
$aContent = parent::$sth->fetchAll();
return $aContent;
?>
Krijg ik een error:
Fatal error: Call to a member function fetchAll() on a non-object in ... on line 104. Regel 104 is de "$aContent = parent::$sth->fetchAll(); " die je ook in het bovenste gedeelte ziet staan.
Ik wil verder met programmeren, maar zit nu dus vast door dit. En dat is echt irritant als je even vast zit :(.
Quote:
Een verzoekje.
Er zijn steeds meer mensen die denken de moderator te moeten uithangen, en op posts waar ze mensen zien bumpen gaan reageren, met als resultaat nog een bump. Dit werkt behoorlijk averechts. Mijn verzoek dan ook om dit in de toekomst achter wege te laten. Bedankt voor je inzet en begrip!
Er zijn steeds meer mensen die denken de moderator te moeten uithangen, en op posts waar ze mensen zien bumpen gaan reageren, met als resultaat nog een bump. Dit werkt behoorlijk averechts. Mijn verzoek dan ook om dit in de toekomst achter wege te laten. Bedankt voor je inzet en begrip!
Toch mag je nog steeds niet bumpen. ;)
Gewijzigd op 01/01/1970 01:00:00 door --
Maar jha, ik zit hier elke keer de pagina te refreshen :P... Is eenmalig en zal dan ook niet meer gebeuren :P. Ik vind zelf ook niks op google dat werkt :(
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$sth = parent::query($sql);
$aContent = parent::$sth->fetchAll();
return $aContent;
?>
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$sth = parent::query($sql);
$aContent = parent::$sth->fetchAll();
return $aContent;
?>
Let even op de op-een-na laatste regel. parent::$sth, dat stukje klopt niet. $sth is gewoon een variabele in de huidige scope, niet een static property van PDO zelf. Dus gewoon $sth->fetchAll() :)
PS: Waar staat $sth voor? De variabele-naam klinkt wat vreemd en onverwacht.
edit:
Werkt ook weer niet :(:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$sth = parent::query($sql);
$aContent = $sth->fetchAll(); /* Regel 104 */
return $aContent;
?>
Error:
Fatal error: Call to a member function fetchAll() on a non-object in ... on line 104
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
$sth = parent::query($sql);
$aContent = $sth->fetchAll(); /* Regel 104 */
return $aContent;
?>
Error:
Fatal error: Call to a member function fetchAll() on a non-object in ... on line 104
edit2:
Zal ik anders de hele script plaatsen? Maak mij niks uit of andere hem gaan gebruiken of iets dergelijks.
Gewijzigd op 01/01/1970 01:00:00 door DDragonz
in je code te gebruiken, zodat je zeg maar standaard hetzelfde effect als 'or die(mysql_error())' hebt tenzij je er iets aan doet (try-catch statement plaatsen)
edit:
Ik heb een domme fout gemaakt... Ik heb de database en de script niet op elkaar afgestemd. Even nu kijk of ie het doet.
Regelnummer: 105
Bestand: ...
Foutmelding: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'voornaam' in 'order clause'
edit2:
Ik zie dat ik nu geen error krijg, maar hij doet het nog steeds niet:
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
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
public function getContentArray()
{
try
{
parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$iOffset = ($this->CurrentPage - 1) * $this->iRows;
//$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$this->iRows.' OFFSET '.$iOffset.';';
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
echo $sql;
$content = parent::query($sql);
$aContent = $content->fetchAll();
echo '<pre>';
$aContent;
echo '</pre>';
return $aContent;
}
catch(PDOException $e)
{
echo '<pre>';
echo 'Regelnummer: '.$e->getLine().'<br>';
echo 'Bestand: '.$e->getFile().'<br>';
echo 'Foutmelding: '.$e->getMessage().'<br>';
echo '</pre>';
}
}
{
try
{
parent::setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$iOffset = ($this->CurrentPage - 1) * $this->iRows;
//$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$this->iRows.' OFFSET '.$iOffset.';';
$start = ($this->CurrentPage * $this->iRecordsPage) - $this->iRecordsPage;
$sql = 'SELECT * FROM auto ORDER BY '.$this->CurrentColumn.' '.$this->CurrentDirection.' LIMIT '.$start.','.$this->iRecordsPage.'';
echo $sql;
$content = parent::query($sql);
$aContent = $content->fetchAll();
echo '<pre>';
$aContent;
echo '</pre>';
return $aContent;
}
catch(PDOException $e)
{
echo '<pre>';
echo 'Regelnummer: '.$e->getLine().'<br>';
echo 'Bestand: '.$e->getFile().'<br>';
echo 'Foutmelding: '.$e->getMessage().'<br>';
echo '</pre>';
}
}
Als ik de sql in phpmyadmin doe. Dan doet hij het.
edit3:
Ik zie nu dat je de waardes niet kan zien met:
Maar alleen met $this->aContent[1]['merk'] bijvoorbeeld. Maar hoe komt dat dan eigenlijk?
edit4: Ik heb vandaag denk ik te lang gewerkt aan dit. Want de domme fouten die ik nu in een keer zie. Ik had dit in plaats van het laaste:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
echo '<pre>';
$this->aContent;
echo '</pre>';
echo '<pre>';
print_r($this->aContent);
echo '</pre>';
$this->aContent;
echo '</pre>';
echo '<pre>';
print_r($this->aContent);
echo '</pre>';
Echt dom dus... Maar hij doet het nu :). Dankje voor alle hulp! Zal hem ook hier nog plaatsen om te zien of ik het oop concept wel een beetje door heb(dus of het wel echt oop is en niet een stukje code in oop :p)
Gewijzigd op 01/01/1970 01:00:00 door DDragonz