2016-05-25 4 views
0

私はコードの初心者ですので、おそらく私のコードはそれほど素晴らしいものではありませんが、最初はそれを動作させたいと思っています。 mysqlの構文制限のエラー-1,1

は私が私が思う自分の限界引数を指定してエラーを持っているが、私はそれが

あなたはいくつかの助けをしてください提供できます修正する方法がわかりませんか?

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

} 

?> 

エラーが私は、データベース内のいくつかのより多くのエントリを行うが、それは解決策:(

なかった場合、私は「-1,1」私はこの問題を解決することができると考え

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 

です

私はmysqlデータベースを使用していますが、ここで2つの引数を与えているので、オフセット関数に関する正確な意味を理解できません。 。 http://dev.mysql.com/doc/refman/5.7/en/select.html

+0

なぜ-1、1更新しますか?代わりに0,1を試してください。 –

+0

-1オフセットはありません。また、 'LIMIT'はそれ自身の予約キーワードではなく、あなたが使っているRDMSは何ですか、あなたの質問を編集し、詳細を追加します – Bonatti

答えて

1

あなたは間違っている制限値を計算する - あなたのコードを(ドイツ語to英語!)

($page * $pages_overall) - $itemsPerPage; 

正しい

$リミット=(($ページ - 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>'; 
} 

?>私はドイツ語で、いくつかの助けのコメントを書き込むことがstackoverflowのために大丈夫であると思います

...