こんにちは、私は自分のコードで問題を見つけようとしています。私はSQL_CALC_FOUND_ROWSとFOUND_ROWS()を使用してデータベースの全レコード量を取得します(PDOを使用)。私の問題は、FOUND_ROWS()が常に0を返すことです。PDO PHP&MYSQL SELECT 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" }
私はに喜んだので、あなたがのは、私に知らせて任意のアイデアを持っていれば今すぐ何でも試してみてください:)
この質問はあまりにもnoobではないことを望んでいる!私が言ったように、私はここで非常に簡単な何かを逃していると思う。
編集
実行()関数は、それが依然としてコードをまた
を実行するように進む()if文で使用される正しい等です。これはコードのFOUND_ROWS()部分と関係していると思いますあなたのSQLにSQL_CALC_FOUND_ROWSの後ろにカンマが欠落している
<?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;
}
}
}
お困りですか?Berichtクラスの構文は、任意のSQLクエリを行いますか? – ChrisK
@ChrisKいいえ、Berichtクラスにはセッターとゲッターが含まれています。 – Bono
エラーが発生しましたか?それともちょうど0ですか? 'nextRowset()'を使ってレコードセットをループしてみましたか? –