Добрый день, я пытался выяснить проблему в моем коде. Я использую SQL_CALC_FOUND_ROWS и FOUND_ROWS (), чтобы получить общее количество записей в моей базе данных (с PDO). Моя проблема в том, что FOUND_ROWS () всегда возвращает 0.
Дело в том, что у меня это работало раньше, но я внес кое-какие коррективы тут и там, и теперь оно перестало работать. Я не могу из любви к себе вспомнить, что я мог удалить, что было важно, и не могу найти хорошую документацию, используя эти функции с PDO.
До сих пор я пытался поместить его в разные циклы, пробовал fetch () в разных режимах, пробовал размещать команды в разном порядке (то есть до цикла while и после цикла while и т. Д.). Я думаю, что я просто упускаю что-то очень простое здесь, но я смотрю на это примерно 1-2 часа, и это сводит меня с ума.
Так вот мой код:
public function findBerichten($args)
{
//$offset zorg ervoor dat pagina 1 als record 0 in de database zoekt
$offset = ($args['huidigePagina'] - 1) * $args['itemsPerPagina'];
$sth = $this->db->DBH()->prepare("SELECT SQL_CALC_FOUND_ROWS
berichten.berichtID,
berichten.bericht,
berichten.naam,
berichten.mail
FROM `berichten`
ORDER BY berichten.datumToegevoegd DESC
LIMIT ?, ?");
$sth->bindParam(1, $offset, PDO::PARAM_INT);
$sth->bindParam(2, $args['itemsPerPagina'], PDO::PARAM_INT);
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
$berichten = array();
while($row = $sth->fetch())
{
$bericht = new Bericht();
$bericht->setBerichtID(htmlentities(strip_tags($row['berichtID'])));
$bericht->setBericht(htmlentities(strip_tags($row['bericht'])));
$bericht->setNaam(htmlentities(strip_tags($row['naam'])));
$bericht->setMail(htmlentities(strip_tags($row['mail'])));
$berichten[] = $bericht;
}
$sth = $this->db->DBH()->prepare("SELECT FOUND_ROWS() as aantalBerichten");
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
$this->aantalBerichten = $sth->fetch();
var_dump($this->aantalBerichten);
return $berichten;
}
index.php
if($huidigePagina < 1)
{
//$huidigePagina is 1
$huidigePagina = 1;
}
//Als de huidige pagina groter is als het totaal aantal pagina's
if($huidigePagina > $totaalPaginas)
{
//$huidigePagina is gelijk aan het totaal aantal pagina's
$huidigePagina = $totaalPaginas;
}
$berichtDAO->findBerichten(array('huidigePagina'=>$huidigePagina, 'itemsPerPagina'=>10))
вывод var_dump: array(1) { ["aantalBerichten"]=> string(1) "0" }
Если у вас есть идеи, дайте мне знать, потому что я готов попробовать что угодно прямо сейчас:)
Надеюсь, этот вопрос не слишком нуб! Как я уже сказал, я думаю, что мне здесь чего-то не хватает.
1020 * редактировать *
функция execute () верна и т. д. при использовании в операторе if () она все еще продолжает выполнять код
Также; Я на 90% уверен, что это связано с частью кода FOUND_ROWS ().
редактировать 2, включая класс БД и класс Берихта ()
Берихт класс:
<?php
Class Bericht
{
private $db;
private $berichtID;
private $bericht;
private $naam;
private $mail;
public function __construct(Db $db)
{
$this->db = $db;
}
public function setBerichtID($berichtID)
{
$this->berichtID = $berichtID;
}
public function getBerichtID()
{
return $this->berichtID;
}
public function setBericht($bericht)
{
$this->bericht = $bericht;
}
public function getBericht()
{
return $this->bericht;
}
public function setNaam($naam)
{
$this->naam = $naam;
}
public function getNaam()
{
return $this->naam;
}
public function setMail($mail)
{
$this->mail = $mail;
}
public function getMail()
{
return $this->mail;
}
}
дБ класс:
<?php
class Db
{
//bij het laden van Db
public function __construct()
{
//voer functie connect() uit
$this->connect();
}
//functie voor het verbinding maken met en het selecteren van een database
private function connect()
{
//$connection is connectie naar mysql database (met de opgegeven inlog waardes)
$connection = mysql_connect('localhost', 'user', 'pw');
//als er geen connectie gemaakt kan worden
if(!$connection)
{
//die (voer overige code niet meer uit) en echo string + de mysql error
die("Kan geen verbinding maken: " . mysql_error());
}
//selecteert de opgegeven database met de connectie ($connection)
mysql_select_db("db", $connection);
}
public function DBH()
{
try
{
$DBH = new PDO('mysql:host=localhost;dbname=db', 'user', 'pw');
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $DBH;
}
catch (PDOException $except)
{
echo $except->getMessage();
}
}
//function to retrieve records -- not important
public function getRecords($sth)
{
$rows = array();
if($sth->execute() == true)
{
$sth->setFetchMode(PDO::FETCH_OBJ);
while($row = $sth->fetch())
{
$rows[] = $row;
}
return $rows;
}
else
{
return false;
}
}
}