2012-10-24 21 views
6

現在、Prepared Statementを使用してSQL_CALC_FOUND_ROWSを実装する方法については頭が痛いです。MySQLi/Prepared StatementsとSQL_CALC_FOUND_ROWS

私はページングクラスを作成していますが、明らかにLIMITをクエリに追加するだけでなく、合計行数を調べることもできます。

問題のクラスの例です。

$query="select SQL_CALC_FOUND_ROWS id,title,location,salary,employer from jobs where region=38 limit 0,3"; 

if($stmt = $connection->prepare($query)) { 
      $stmt->execute()or die($connection->error); //execute query 
      $stmt->bind_result($id,$title,$location,$salary,$employer,$image); 
      while($stmt->fetch()){ 
       $jobs[$x]['id']=$id; 
       $jobs[$x]['title']=$title; 
       $jobs[$x]['location']=$location; 
       $jobs[$x]['salary']=$salary; 
       $jobs[$x]['employer']=$employer; 
       $jobs[$x]['image']=$image; 
       $x++; 
      } 
      $stmt->close();//close statement 
     } 

私はSQL_CALC_FOUND_ROWS実際の値を取得する方法へと困惑ビットね?それがなければならないこと上記の例では、その3ではなく、完全な6を

  $stmt->store_result(); 
      $count=$stmt->num_rows; 

しかし、唯一のLIMITに基づいて番号を与えることなので、私のようなものに加えること考えていました。

希望は意味があります。

+0

これで、SELECT FOUND_ROWS()を使用する必要があることが判明しましたが、これを実装する方法がまだわかりません。私は完全に新しいクエリのようにそれを実行する必要がありますか? – cosmicsafari

答えて

9

これを理解するためには、将来的に興味のある人のために私の答えを以下に詳述します。

オリジナルコード

$query="select SQL_CALC_FOUND_ROWS id,title,location,salary,employer from jobs where region=38 limit 0,3"; 

if($stmt = $connection->prepare($query)) { 
     $stmt->execute()or die($connection->error); //execute query 
     $stmt->bind_result($id,$title,$location,$salary,$employer,$image); 
     while($stmt->fetch()){ 
      $jobs[$x]['id']=$id; 
      $jobs[$x]['title']=$title; 
      $jobs[$x]['location']=$location; 
      $jobs[$x]['salary']=$salary; 
      $jobs[$x]['employer']=$employer; 
      $jobs[$x]['image']=$image; 
      $x++; 
     } 
     $stmt->close();//close statement 
    } 

更新されたコード

$query="select SQL_CALC_FOUND_ROWS id,title,location,salary,employer from jobs where region=38 limit 0,3"; 

if($stmt = $connection->prepare($query)) { 
     $stmt->execute()or die($connection->error); //execute query 
     $stmt->bind_result($id,$title,$location,$salary,$employer,$image); 
     while($stmt->fetch()){ 
      $jobs[$x]['id']=$id; 
      $jobs[$x]['title']=$title; 
      $jobs[$x]['location']=$location; 
      $jobs[$x]['salary']=$salary; 
      $jobs[$x]['employer']=$employer; 
      $jobs[$x]['image']=$image; 
      $x++; 
     } 
      //get total number of rows. 
      $query="SELECT FOUND_ROWS()"; 
      $stmt = $connection->prepare($query); 
      $stmt->execute(); 
      $stmt->bind_result($num); 
      while($stmt->fetch()){ 
       $count=$num; 
      } 

     $stmt->close();//close statement 
    } 

おそらく、より良い別の方法でそれを行うことができますが、これは作品のどこオンライン任意の良い例を見つけるように見えることができませんでした!

+2

"while"を使用する必要はありません。単一行を返すだけです –

関連する問題