考虑以下脚本:
SELECT * FROM TABLE1 WHERE COLUMN1='$exb';
$ exb是一个PHP变量,它从一个带有3个值的HTML选择列表中提供:0,1,2。值1和2对应于column1值。如果选择值0,我想包括COLUMN1的所有值。有没有办法在不改变脚本的情况下实现上述内容?换句话说,是否有任何关键字分配给$ exb,如果用户从HTML选择列表中选择0,脚本将强制脚本选择表TABLE1的所有行? 谢谢
答案 0 :(得分:1)
它有点不清楚,但我想你问是否有一个特殊的子句你可以添加到where子句来返回数据库中的每一行而不是在where子句中匹配的特定条件。
你可以通过说col1=col1
来假装where子句,这实际上是一种伪造的(虽然有效)语法:
SELECT * FROM TABLE1 WHERE COLUMN1=column1;
虽然必须没有引号才能选择表格的每一行。
在你的php中将引号括在变量周围会非常简单。
话虽如此,如果选择的值为0,那么简单地省略where子句会不会更容易?
答案 1 :(得分:1)
为此,您需要构建动态查询。
$query = "SELECT * FROM TABLE1";
$exb = isset($_GET['exb']) ? $_GET['exb'] : 0;
$goodParam = array(0,1,2);//array of allowed values
if($exb>0){
if (in_array($exb, $goodParam)) {
$query .= " WHERE COLUMN1 = '$exb'";
}
}
echo $query;
答案 2 :(得分:0)
我认为你不能只使用MySql查询。您需要使用php和ifelse语句,您可以在执行查询之前检查$ exb值。例如:
if($exb == "0")
$query = "SELECT * FROM TABLE1";
else
$query = "SELECT * FROM TABLE1 WHERE COLUMN1='$exb'";