1

我会尽力解释我创建一个查询来返回搜索函数的行 ex:return row WHERE id LIKE = _ _

这是我的代码:

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>";
        }

问题是当我显示查询时,它会返回我的 2 个表中的所有行,而忽略 LIKE %$champs%

注意* 当我显示查询时,它看起来很好:SELECT * FROM mydb.newtable WHERE 1 OR Username LIKE '%$champs%' OR nom LIKE '%$champs%' OR prenom LIKE '%$champs%' 并且 $nb_result 总是返回 48(我在两个表中的行数合并)

4

1 回答 1

1

一个where子句基本上归结为数据库的布尔决策,“包括这一行,或者不包括它”。既然你在做

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

你总是产生一个“真实”的价值,所以所有的行都会匹配并被包括在内。

记住你的布尔真值表。true OR anything是真的。

于 2013-05-14T17:40:40.650 回答