Paginasi PDO dengan LIKE
Kode PHP SQL berikut menunjukkan kesalahan Kesalahan fatal yang dapat dipulihkan: Objek kelas PDOStatement tidak dapat diubah menjadi string di /home/customer/xxxx/fetch_data.php pada baris 28 Saya mencoba menampilkan informasi produk dari tabel filter
Ada dua $statement->execute();
, satu adalah menghitung total hasil pencarian dan satu lagi adalah menampilkan produk untuk halaman ini. Saya baru mengenal metode PDO dan bukan ahli dalam pengkodean keseluruhan.
Ini menyebabkan masalah. Dengan itu dan fungsi terkait, kode berfungsi dan menampilkan data. Tetapi jika saya mengaktifkannya, kesalahan akan muncul.$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
Saya mencoba kode berikut seperti yang disarankan oleh Your Common Sense
dan jumlah halaman dan hasil pencarian total berfungsi dengan baik, tetapi tidak ada produk yang ditampilkan.
$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
Menggunakan baris berikut membuat kode menampilkan beberapa data, tetapi pagination tidak berfungsi.
$data_sql = sprintf($base_sql, "*");
$stmt = $connect->prepare($data_sql); $stmt->execute([$search]); $result = $stmt->fetchAll();
Jawaban
Itu bukan tugas yang sepele karena kami perlu menjalankan kueri yang sama dua kali tetapi dengan perbedaan kecil. Kueri pertama akan menggunakan count(*)
fungsi SQL untuk mendapatkan jumlah total record yang cocok dengan kriteria pencarian. Kueri kedua akan memilih bidang aktual dengan klausa LIMIT untuk mendapatkan data untuk satu halaman.
$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();
Penting: Agar kode ini berfungsi, pastikan Anda terhubung ke mysql dengan benar . koneksi yang tepat akan membiarkan klausa LIMIT menerima placeholder dan juga akan memperingatkan Anda jika ada masalah.