MySQL çağrı ile küçük bir yardım (LMT) ihtiyacınız var

2 Cevap php

Bu kodu vardır:

    $page = $_GET['page'];
    $res_per_page = $_GET['res_per_page'];

    $start_point = (($page * $res_per_page) - $res_per_page);
    $query.= " LIMIT $start_point, $res_per_page";
    $qry_result = mysql_query($query) or die(mysql_error());
    $total_pages = ceil($nr_ads / $res_per_page);

Değişken '$ nr_ads' reklamların toplam nr olduğunu ...

Kod çalışıyor, ama ben reklamlar, eski gösteren hangi anlamaya nasıl merak ediyorum:

   Showing ads 10 - 20

Teşekkürler ...

2 Cevap

print 'Showing ads ' . $start_point . ' - ' . min($nr_ads, $start_point + res_per_page);

Temelde zaten SQL sizin LIMIT fıkrası verildiği (başlangıç ​​noktası var ettik. "Bitiş noktası" Bu başlangıç ​​noktasına $res_pre_page eklenerek hesaplanır. Açık Son sayfa, ancak, sadece 2 kayıt olabilir - bu yüzden "- 62 ilan 60 gösteriliyor" örneğin yazdırmak için min() işlevini kullanmanız gerekir.


Takip: Başka bir cevap SQL enjeksiyon riskini bahseder. Sen kullanarak güvenli olacak:

$page = intval($_GET['page']);
$res_per_page = max(1, intval($_GET['res_per_page'])); // To avoid division by zero :)

Basit yolu tabloda bir kimlik alanını oluşturmak ve istediğiniz bilgileri görüntülemek için kullanabilirsiniz olacaktır, sorgu şöyle değiştirilmiş olacaktır:

 LIMIT $start_point, $res_per_page ORDER BY ad_id ASC

oradan, sen ilk sonucu ve son sonuç alabilirsiniz ve size toplanıyor bilgi çıkışa kullanabilirsiniz.

Aşağıdaki kod neden olabilir, çok önemli bir güvenlik notu uzaktan SQL injection:

$query.= " LIMIT $start_point, $res_per_page";

Oldukça için değiştirmek tavsiye edilir:

$query.= " LIMIT $start_point, ".mysql_real_escape_string($res_per_page)." ORDER BY ad_id ASC";