mysql select语句中的特殊关键字

时间:2014-11-09 11:13:48

标签: php mysql

考虑以下脚本:

SELECT * FROM TABLE1  WHERE COLUMN1='$exb';

$ exb是一个PHP变量,它从一个带有3个值的HTML选择列表中提供:0,1,2。值1和2对应于column1值。如果选择值0,我想包括COLUMN1的所有值。有没有办法在不改变脚本的情况下实现上述内容?换句话说,是否有任何关键字分配给$ exb,如果用户从HTML选择列表中选择0,脚本将强制脚本选择表TABLE1的所有行? 谢谢

3 个答案:

答案 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'";