2017-02-10 3 views
-4

meine Abfrage istMeine SQL-Abfrage ist richtig oder falsch? Es zeigt mir Fehler wie Warnung: mysqli_num_rows() erwartet Parameter 1 werden MySQLi_Result, boolean

$statement = "SELECT * FROM profile_details 
     WHERE YEAR(CURDATE())-YEAR(dob) BETWEEN '$search_age' 
               AND '$search_age1' 
      AND gender LIKE '$search_gender' 
     OR main_caste LIKE '$search_relegion' 
     OR education_type LIKE '$search_qualification' 
     OR occupation LIKE '$search_occupation'"; 

Wenn ich mysqli_error($con); echo es Nachricht zeigt

You have an error in your SQL syntax; check the manual that corresponds 
     to your MariaDB server version for the right syntax 
     to use near 
    'SELECT * FROM profile_details 
     WHERE YEAR(CURDATE())-YEAR(dob) BETWEEN '20' AND '' at line 1 

Meine Verbindungsdatei ist unten angegeben

Und das Suchergebnis PHP-Datei ist .. Ich benutze Paginierung für Suchergebnisse ... Auf dieser Seite e Ich erhalte Fehler: Sie haben einen Fehler in Ihrer SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MariaDB Server-Version für die richtige Syntax entspricht in der Nähe verwenden ‚SELECT * FROM profile_details WHERE

<?php 
       date_default_timezone_set('Asia/Kolkata'); 
       require_once("includes/config.php"); 
       require_once("includes/user_pagination.php"); 
       global $con; 
       //if(isset($_POST['home_quick_search'])){ 

       //get serch data from index.php 
        $search_gender = $_GET['s_gender']; 
        $search_relegion = $_GET['s_religion']; 
        $search_occupation = $_GET['s_occupation']; 
        $search_age = $_GET['s_age']; 
        $search_age1 = $_GET['s_age1']; 
        $search_qualification = $_GET['s_qualification']; 

       $page = (int)(!isset($_GET["page"]) ? 1 : $_GET["page"]); 
       if ($page <= 0) $page = 1; 

       $per_page = 10; // Set how many records do you want to display per page. 

       $startpoint = ($page * $per_page) - $per_page; 

       $statement = "`profile_details` WHERE `DATEDIFF(YEAR,dob,CURDATE())` AS dob BETWEEN '$search_age' AND '$search_age1' AND `gender` LIKE '$search_gender' OR `main_caste` LIKE '$search_relegion' OR `education_type` LIKE '$search_qualification' OR `occupation` LIKE '$search_occupation' ORDER BY `user_id` ASC"; 

//$statement = "SELECT * FROM profile_details WHERE YEAR(CURDATE())-YEAR(dob) BETWEEN '$search_age' AND '$search_age1' AND gender LIKE '$search_gender' AND main_caste LIKE '$search_relegion' AND education_type LIKE '$search_qualification' AND occupation LIKE '$search_occupation'"; 



       $results = mysqli_query($con,"SELECT * FROM {$statement} LIMIT {$startpoint} , {$per_page}") or die (mysqli_error($con)); 

        if (mysqli_num_rows($results) != 0) { 

        // displaying records. 
        $i = 0; 
         while ($row_user = mysqli_fetch_array($results)) { 

         $u_id = $row_user['user_id']; 
         $u_pid = $row_user['profile_id']; 
         $u_gender = $row_user['gender']; 
         $u_fname = $row_user['first_name']; 
         $u_relegion = $row_user['main_caste']; 
         $u_city = $row_user['city']; 
         $u_image = $row_user['photo']; 
         $u_dob = $row_user['dob']; 

         //age calculation 
         $dateOfBirth = $u_dob; 
         $today = date("Y-m-d"); 
         $diff = date_diff(date_create($dateOfBirth), date_create($today)); 
         //echo 'Age is '.$diff->format('%y'); 
         $age = $diff->format('%y'); 
         //age calculation ends 

         $u_status_all = $row_user['user_status']; 
         $u_status_of = $row_user['user_status']=='OFFLINE'; 
         $u_status_on = $row_user['user_status']=='ONLINE'; 


        echo' 
          <div class="col-sm-6 paid_people-left"> 
          <ul class="profile_item"> 
           <a href="view_profile.php?userdetail_id=$u_id"> 

           <li class="profile_item-img">'; 

           if (!empty($u_image)){ 
            echo '<img src="users-photo/resized_'.$u_image.'" class="img-responsive" alt="'.$u_fname.'"/>'; 
           } 
           else{ 
            echo '<img src="images/s2.jpg" class="img-responsive" alt=""/>'; 
           } 



          echo ' </li> 
           <li class="profile_item-desc"> 
            <h4>Profile ID: '.$u_pid.'</h4> 
            <p>Age: '.$age.' Yrs, '.$u_gender.'</p> 
            <h5>View Full Profile</h5> 
            <p>'; 

    if (!isset($u_status_on) && $u_status_of){ 
          echo "Nope"; 
         } 
         elseif (isset ($u_status_of) && $u_status_on){ 
          echo "<img src='images/online.png' /> <span class='label label-success'>"; 
         } 
         else { 
         if (isset ($u_status_of)){ 
          echo "<img src='images/offline.png' /> <span class='label label-default'>"; 
          } 
         } 

         echo " 
          $u_status_all</span><p> 
          </li> 
          <div class='clearfix'> </div> 
          </a> 
          </ul> 
         </div>";      

        } 

        } else { 
              echo "Sorry ! No Profiles are found."; 
            } 

      // } 

      ?> 

       <div class="pagination-div"> 
       <ul class="pagination"> 
        <?php echo pagination($statement,$per_page,$page,$url='?'); ?> 
       </ul> 
      </div> 

Bitte helfen Sie .thanks im Voraus

+2

Nun, echo $ Anweisung ausführen und das Ergebnis ausdrucken. – Dimi

+2

Es ist genau dort! Fehler in der Syntax Überprüfen Sie Ihre SQL-Abfrage, es ist offensichtlich falsch. –

+0

@Dimi danke ... Ich versuche, Geburtsdatum im Alter Format zu konvertieren ... wie man es umwandelt ... –

Antwort

1

Ein paar Anmerkungen:

Der Operator hat eine höhere Rangordnung als der Operator OR. Das Hinzufügen von Parens kann Ihre Absicht für einen zukünftigen Leser deutlicher machen. Haben Sie vor, das Alter nur zu prüfen, wenn das Geschlecht übereinstimmt, und ignorieren Sie ansonsten das Alter?

Die Berechnung des Alters scheint etwas seltsam, da es den Monat und den Tag völlig ignoriert. Die normativen Muster sind die nackte DATE Spalte Ausdrücke zu vergleichen, die DATE Werte zurück ...

WHERE (t.dob > DATE(NOW()) - INTERVAL 25 YEAR AND 
     t.dob <= DATE(NOW()) - INTERVAL 19 YEAR 
     ) 

Als Demonstration der Werte durch jene Ausdrücke zurück ...

SELECT DATE(NOW()) - INTERVAL 25 YEAR AS b 
    , DATE(NOW()) - INTERVAL 19 YEAR AS e 

kehrt

b   e   
---------- ---------- 
1992-02-10 1998-02-10 

Debuggen Sie ein Problem mit SQL, echo oder var_dump den Wert des SQL-Textes, bevor Sie es zur Ausführung senden.

Dann untersuchen Sie die SQL.


Das Codemuster in der Frage gezeigt, einschließlich der Werte in der SQL-Text, ist ein Muster, das wir häufig in Code sehen, die auf SQL-Injection verwundbar ist. Wir können nicht feststellen, ob dieser Code angreifbar ist, da wir nicht feststellen können, ob diese Werte ordnungsgemäß maskiert wurden.

+0

OP hat jetzt vollen Code hinzugefügt; ich hoffe es zumindest. –

+0

@ Fred-ii- danke ... Ich habe meine Frage aktualisiert .. –

0

Bitte fügen Sie Ihrem booleschen Ausdruck Parens hinzu, um uns davon zu überzeugen, dass Sie es richtig gemacht haben.

Verwandte Themen