LIKE ile PDO sayfalandırma
Aşağıdaki PHP SQL kodu, Kurtarılabilir ölümcül hata hatasını gösteriyor: PDOStatement sınıfının nesnesi, 28. satırda /home/customer/xxxx/fetch_data.php içinde dizeye dönüştürülemedi Tablodan ürün bilgilerini görüntülemeye çalışıyordum filter
İki $statement->execute();
, bir toplam arama sonuçlarını saymak ve bir diğeri de geçerli sayfa için ürünleri görüntülemek. PDO yönteminde yeniyim ve genel kodlama konusunda uzman değilim.
Sorunlara yol açıyor. Bununla ve ilgili işlevlerle, kod çalışır ve verileri görüntüler. Ancak etkinleştirirsem hata ortaya çıkıyor.$filter_query = $stmt . 'LIMIT '.$start.', '.$limit.'';
$limit = '5';
$page = 1; if($_POST['page'] > 1)
{
$start = (($_POST['page'] - 1) * $limit); $page = $_POST['page']; } else { $start = 0;
}
$search = "%samsung%"; $stmt = $connect->prepare("SELECT * FROM filter WHERE product_name LIKE :needle"); $stmt->bindParam(':needle', $search, PDO::PARAM_STR); ## ## $filter_query = $stmt . 'LIMIT '.$start.', '.$limit.''; $statement->execute();
$total_data = $stmt->rowCount();
$stmt = $connect->prepare($filter_query); $stmt->execute();
$result = $stmt->fetchAll();
$total_filter_data = $stmt->rowCount();
$output = ' <h3> '.$total_data.' results found </h3>
and display each product
Aşağıdaki kodu önerdiği gibi denedim Your Common Sense
ve sayfalandırma ve toplam arama sonucu sayısı iyi çalışıyor, ancak hiçbir ürün görüntülenmiyor.
$limit = '5'; $page = 1;
if($_POST['page'] > 1) { $start = (($_POST['page'] - 1) * $limit);
$page = $_POST['page'];
}
else
{
$start = 0; } $name=str_replace(' ', '%', $_POST['query']); $search = "%$name%"; $base_sql = "SELECT %s FROM filter WHERE product_name LIKE ?";
##
##
####
$count_sql = sprintf($base_sql, "count(*)");
$stmt = $connect->prepare($count_sql); $stmt->execute([$search]); $total_data = $stmt->fetchColumn(); #### $data_sql = $count_sql = sprintf($base_sql, "*")." LIMIT ?,?";
$stmt = $connect->prepare($data_sql); $stmt->execute([$search, $start, $limit]); $result = $stmt->fetchAll(); ## $output = '
<h3> '.$total_data.' results found </h3> '; if($total_data > 0)
{
foreach($result as $row)
{
and display each product
Aşağıdaki satırı kullanmak kodun bazı verileri göstermesine neden olur, ancak sayfalandırma çalışmıyor.
$data_sql = sprintf($base_sql, "*");
$stmt = $connect->prepare($data_sql); $stmt->execute([$search]); $result = $stmt->fetchAll();
Yanıtlar
Aynı sorguyu iki kez çalıştırmamız gerektiğinden bu önemsiz bir görev değil, ancak küçük farklılıklar var. İlk sorgu count(*)
, arama kriterleriyle eşleşen toplam kayıt sayısını elde etmek için SQL işlevini kullanacaktır . İkinci sorgu, tek sayfanın verilerini almak için LIMIT yan tümcesine sahip gerçek alanları seçecektir.
$base_sql = "SELECT %s FROM filter WHERE product_name LIKE ?"; $count_sql = sprintf($base_sql, "count(*)"); $stmt = $connect->prepare($count_sql);
$stmt->execute([$search]);
$total = $stmt->fetchColumn();
$data_sql = $count_sql = sprintf($base_sql, "*")." LIMIT ?,?"; $stmt = $connect->prepare($data_sql);
$stmt->execute([$search, $start, $limit]);
$data = $stmt->fetchAll();
Önemli: Bu kodun çalışması için mysql'e doğru şekilde bağlandığınızdan emin olun . doğru bağlantı, bir LIMIT cümlesinin yer tutucuları kabul etmesine izin verecek ve ayrıca herhangi bir sorun olması durumunda sizi uyaracaktır.