2013-05-14 108 views
1

我會盡我所能來解釋我創建一個查詢返回行的搜索功能,例如:回行WHERE ID LIKE = _ _顯示MySQL查詢結果參數PHP

這裏是我的代碼:

if(!empty($champs)){ 
$table[0]["prog"] = array('mydb.message','Message'); 

$table[1]["prog"] = array('mydb.newtable','Username','nom','prenom'); 

作爲表和列尋找到

  $nb_result =0; 


      for($i =0 ; $i < count ($table); $i++) 
      {      
       $prog_tab = $table[$i]["prog"];   


          $sql = sprintf("SELECT * 
              FROM %s 
              WHERE 1 ", 
           $prog_tab [0], 
           DEFAULT_ACCESS_LEVEL); 

       for($j = 1; $j < count ($prog_tab); $j++) 
       { 
         $sql .= sprintf(" OR %s LIKE '%s' ", 
           $prog_tab [$j], 

           $this->ins_string("%".$champs."%"), 
           DEFAULT_ACCESS_LEVEL); 
       } 
       echo $sql; 
         /*$sql = $table[$i]["user"][0] . ' ---> ' . $sql."<br>"; */ 
      $query = mysql_query($sql) or die(mysql_error()); 

      while($rows = mysql_fetch_array($query)){ 
       if($table[$i]["prog"][1] == "Message"){ 
        echo $rows['Sender']." : &nbsp".$rows['Message']."<br />"; 
        } 
        else{ 
         echo $rows['Username']."&nbsp".$rows['nom']."&nbsp".$rows['prenom']."<br />"; 
        } 
       } 
      $nb_result += mysql_num_rows($query); 

      }   


     echo "<br /><h1>".$nb_result."</h1>"; 
     } 

的問題是當我顯示它返回所有從米行的查詢Y 2個表,只是忽略LIKE%$香榭麗舍%

注*當我顯示查詢它似乎很動聽:SELECT * FROM mydb.newtable WHERE 1 OR Username LIKE '%$champs%' OR nom LIKE '%$champs%' OR prenom LIKE '%$champs%' 和$ nb_result總是返回48

回答

1
(我有兩個表合併成排的量)

A where子句基本上歸結爲數據庫的布爾決策,「包含此行或不包含它」。既然你在做

SELECT ... WHERE 1 OR ... OR ... OR ... 
       ^-- 

你總是產生一個'真正'的值,所以所有的行都會匹配並被包含。

記住你的布爾真值表。 true OR anything是真的。

+0

非常感謝你!我現在覺得有點愚蠢,我忘記了1是和 – math487 2013-05-14 17:52:58