LIKE के साथ PDO पेजिनेशन

Aug 18 2020

निम्न PHP SQL कोड त्रुटि दिखाता है पुनर्प्राप्त करने योग्य घातक त्रुटि: श्रेणी PDOStatement का ऑब्जेक्ट स्ट्रिंग में परिवर्तित नहीं किया जा सका /home/customer/xxxx/fetch_data.php 28 लाइन पर मैं तालिका से जानकारी प्रदर्शित करने की कोशिश कर रहा था filterदो $statement->execute();, एक हैं। कुल खोज परिणामों की गणना करना है और एक और वर्तमान पृष्ठ के लिए उत्पादों को प्रदर्शित करना है। मैं पीडीओ पद्धति में नया हूं और समग्र कोडिंग में विशेषज्ञ नहीं हूं।

समस्याएं आ रही हैं। उस और संबंधित कार्यों के साथ, कोड काम करता है और डेटा प्रदर्शित करता है। लेकिन अगर मैं इसे सक्षम करता हूं, तो त्रुटि दिखाई देती है।$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

मैंने निम्न कोड के रूप में सुझाया Your Common Senseऔर पृष्ठांकन और कुल खोज परिणाम गणना ठीक काम कर रही है, लेकिन कोई उत्पाद प्रदर्शित नहीं हो रहा है।

    $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

निम्न पंक्ति का उपयोग करने से कोड कुछ डेटा दिखाता है, लेकिन पेजिनेशन काम नहीं कर रहा है।

$data_sql = sprintf($base_sql, "*");
    $stmt = $connect->prepare($data_sql); $stmt->execute([$search]); $result = $stmt->fetchAll();

जवाब

YourCommonSense Aug 18 2020 at 08:23

यह एक तुच्छ कार्य नहीं है क्योंकि हमें एक ही क्वेरी को दो बार चलाने की आवश्यकता है लेकिन मामूली अंतर के साथ। पहली क्वेरी count(*)खोज मानदंड से मेल खाते रिकॉर्ड की कुल संख्या प्राप्त करने के लिए SQL फ़ंक्शन का उपयोग करेगी । दूसरी क्वेरी सिंगल पेज के लिए डेटा प्राप्त करने के लिए लिमिट क्लॉज वाले वास्तविक क्षेत्रों का चयन करेगी।

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

महत्वपूर्ण: इस कोड को काम करने के लिए, सुनिश्चित करें कि आप ठीक से mysql से कनेक्ट कर रहे हैं । उचित कनेक्शन एक लिमिट खंड को प्लेसहोल्डर्स को स्वीकार करने देगा और आपको किसी भी समस्या के मामले में चेतावनी देगा।