我会尽力解释我创建一个查询来返回搜索函数的行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']." :  ".$rows['Message']."<br />";
}
else{
echo $rows['Username']." ".$rows['nom']." ".$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(我在两个表中组合的行数)
答案 0 :(得分:1)
where
子句基本上归结为数据库的布尔决策,“包含此行,或者不包括它”。既然你正在做
SELECT ... WHERE 1 OR ... OR ... OR ...
^--
你总是会产生'真实'值,所以所有行都会匹配并被包含在内。
记住你的布尔真值表。 true OR anything
是真的。