我是编码的初学者,所以可能我的代码看起来并不那么好,但起初我只想尝试让它工作。
我认为我的限制参数有错误,但我不知道如何解决它
你能提供一些帮助吗?
<?php
require_once ("config.inc.php");
try {
$db = new PDO ($dsn,$user,$passw);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
die ("Fehler im System");
}
# Blätterfunktion
$sql_anzahl = "SELECT COUNT(*) as 'total' FROM news";
$query2 = $db->query($sql_anzahl);
$anzahl_total = $query2->fetch();
echo $anzahl_total ['total'];
echo "<br><br>";
$eintrag_gesamt = $anzahl_total['total']; //Gesamtanzahl als Variable
$pro_seite = 1; // Einträge pro Seite
$seiten_gesamt = $eintrag_gesamt/$pro_seite; // wie viele Seiten gibt es insgesamt
echo $seiten_gesamt. "<br><br>";
# auf welcher Seite
$page = (int)$_GET['page'];
if(!isset($page))
{
$page = 1;
}
else if ($page > $seiten_gesamt)
{
$page = 1;
}
else
{
$page = (int)$_GET['page'];
}
echo $page;
echo "<br><br>";
# wo anfangen zu zählen
$limit = ($page*$seiten_gesamt)-$pro_seite;
#news
$sql = "SELECT * FROM news ORDER BY ID DESC LIMIT $limit,$pro_seite";
$query = $db->query($sql);
while($r = $query->fetch()) {
echo nl2br($r['Text']), '<br><br>';
}
?>
错误是
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1,1' at line 1' in /www/htdocs/desktop/datenbank/pdo.php:65 Stack trace: #0 /www/htdocs/desktop/datenbank/pdo2.php(65): PDO->query('SELECT * FROM n...') #1 {main} thrown in /www/htdocs/w01034b5/datenbank/pdo.php on line 65
我认为如果我在我的数据库中再做一些条目,我可以解决问题'-1,1',但这不是解决方案:(
我正在使用mysql数据库。我不确定你对偏移函数的确切含义,因为我在这里给出了2个参数。
我比较了mysql文档中限制部分的用法。 http://dev.mysql.com/doc/refman/5.7/en/select.html
答案 0 :(得分:1)
您计算错误的限制值 - 您的代码(德语到英语!)
($page * $pages_overall) - $itemsPerPage;
<强>正确强>
$ limit =(($ page - 1)* $ itemsPerPage)。 ','。 $ itemsPerPage;
更新了您的代码
<?php
require_once("config.inc.php");
try {
$db = new PDO ($dsn, $user, $passw);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die ("Fehler im System");
}
# Blätterfunktion
$sql_anzahl = "SELECT COUNT(*) as 'total' FROM news";
$query2 = $db->query($sql_anzahl);
$anzahl_total = $query2->fetch();
echo $anzahl_total['total'];
echo "<br><br>";
// Gesamtanzahl als Variable
$eintrag_gesamt = $anzahl_total['total'];
// Einträge pro Seite
$pro_seite = 1;
// wie viele Seiten gibt es insgesamt
$seiten_gesamt = ceil($eintrag_gesamt / $pro_seite); // TODO immer auf nächste ganzzahl gehen mit ceil() verstehst du warum?
echo $seiten_gesamt . "<br><br>";
# auf welcher Seite
// TODO das bringt nichts, somit kann ein isset() darunter niemals greifen weil $page = 0
//$page = (int) $_GET['page'];
$page = (isset($_GET['page']) && is_numeric($_GET['page']) ? $_GET['page'] : 1);
$page = ($page > $seiten_gesamt ? 1 : $page);
// TODO überflüssig siehst du selber oder?
/*
if (!isset($page)) {
$page = 1;
} else if ($page > $seiten_gesamt) {
$page = 1;
} else {
$page = (int) $_GET['page'];
}
*/
echo $page;
echo "<br><br>";
# wo anfangen zu zählen
// TODO das kann nicht funktionieren
//$limit = ($page * $seiten_gesamt) - $pro_seite;
$limit = (($page - 1) * $pro_seite) . ',' . $pro_seite;
// TODO gehen wir es mal durch...
// Seite1: 0*1 = 0 ... LIMIT 0,1
// Seite2: 1*1 = 0 ... LIMIT 1,1
// Seite3: 2*1 = 0 ... LIMIT 2,1
#news
$sql = "SELECT * FROM news ORDER BY ID DESC LIMIT $limit,$pro_seite";
$query = $db->query($sql);
while ($r = $query->fetch()) {
echo nl2br($r['Text']), '<br><br>';
}
&GT;
我希望stackoverflow可以写一些帮助评论德语...