mysql语法限制-1,1中的错误

时间:2016-05-25 11:17:00

标签: php mysql pdo

我是编码的初学者,所以可能我的代码看起来并不那么好,但起初我只想尝试让它工作。

我认为我的限制参数有错误,但我不知道如何解决它

你能提供一些帮助吗?

   <?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

1 个答案:

答案 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可以写一些帮助评论德语...