2016-08-05 4 views
1

にレコード場合、私はエラーので、データベース

var_dump($offset); 
var_dump($per_page); 
var_dump($uid); 

float(-10) 
int(10) 
int(4) 

のような否定的な結果を得ると私のコードは

$query = "SELECT COUNT(*) FROM applied WHERE memberID = :memberID"; 
     $stmt = $db->prepare($query); 
     $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
     $stmt->execute(); 
     $total = $stmt->fetchColumn();  

$pages = ceil($total/$per_page); 

$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default' => 1, 
'min_range' => 1, 
), 
))); 

$offset = ($page - 1) * $per_page; 

$query = "SELECT * FROM applied WHERE memberID = :memberID ORDER BY id DESC LIMIT :per_page OFFSET :offset"; 

     $stmt = $db->prepare($query); 
     $stmt->bindParam(':per_page', $per_page, PDO::PARAM_INT); 
     $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); 
     $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
     $stmt->execute(); 

$result = $stmt->fetchAll(); 

これは解決策

$offset = ($page - 1) * $per_page; 
if($offset < 0){ 
$offset = 10; 
} 
だろうである私のオフセットが0の場合

または他の人がこの問題に対処するより良い方法を示すことができます

あなたの助けを歓迎します

+0

むしろ愚かな質問をしかし、このコードは、ページがベースの0ですが、あなたの仮定は、彼らはベースの1だということであることを意味します。どちらですか? – apokryfos

答えて

1

PHPのabs関数を使用して、オフセットが正数であることを常に確認してください。

$offset = abs(($page - 1) * $per_page); 
+0

うわー、それは簡単でしたか?おかげです、あなたの助けに感謝します –

+0

'$ page = 0'でも2ページ目を得ることはできませんか? – apokryfos

+0

著者によると、値は-10ではなかったので、彼は彼が持っている問題を修正する必要があります。 – Dave

0

にコードを変更します。

$query = "SELECT COUNT(*) FROM applied WHERE memberID = :memberID"; 
     $stmt = $db->prepare($query); 
     $stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
     $stmt->execute(); 
     $total = $stmt->fetchColumn();  

$pages = ceil($total/$per_page); 

$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
'options' => array(
'default' => 1, 
'min_range' => 1, 
), 
))); 

$offset = ($page - 1) * $per_page; 

$query = "SELECT * FROM applied WHERE memberID = :memberID ORDER BY id DESC LIMIT :per_page".($offset>0?" OFFSET :offset":""); 

$stmt = $db->prepare($query); 
$stmt->bindParam(':per_page', $per_page, PDO::PARAM_INT); 
if ($offset > 0) { 
    $stmt->bindParam(':offset', $offset, PDO::PARAM_INT); 
} 
$stmt->bindParam(':memberID', $uid, PDO::PARAM_INT); 
$stmt->execute(); 

$result = $stmt->fetchAll(); 
+0

次のエラーを取得致命的なエラー: 'SQLSTATE [HY093]パラメータ番号 ' –

+0

が無効です。それは起こるべきではありません。 – apokryfos

+0

thats何の仲間、私はgodaddyウェブホストで奇妙なエラーが発生している –

関連する問題