2016-08-05 46 views
0

何らかの理由でこれが正常に機能しますが、共有ホストに置くと次のエラーメッセージが表示されます。値が渡されており、これはデータベースが空の場合にのみ発生します。データベースに値がない場合、エラーが発生する

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1210 Incorrect arguments to mysqld_stmt_execute 

私はのvar_dumpを試してみましたが、これは出力

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(); 

感謝です、お時間

+0

唯一の解決策は、テーブル上の行がなくてもコードを修正することです。あなたはあなたのシステムを知っています、あなただけがこの状況でデータ無しで何をすべきかを決めることができます – RiggsFolly

+0

WAMPでもテーブルに行がないと失敗するので、無関係です – RiggsFolly

+0

あなたは正しい@RiggsFolly –

答えて

0

に感謝これらとPHPのコードを交換してください

$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; 
if($offset < 0){ 
$offset = 10; 
} 
$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(); 
+1

OPが「このコードを使用する」必要があるのはなぜですか? **良い答え**は、何が行われたのか、そしてなぜそれがそのように行われたのかについての説明をいつも持っています。この質問を見つけて回答を読んでいるかもしれないので、OPのためだけでなく将来の訪問者のために 。 – RiggsFolly

+0

おかげさまでそれはうまくいきますが、-10としてオフセット値がどのくらい正確になっているのか、データベースが完全に空であることを知っていますか? –

+0

'$ offset =($ page - 1)* $ per_page; '$ page = 0'は' $ offset =(-1)* 10 '、つまり '-10'と評価されます。 – RiggsFolly

関連する問題