Php 如何在sql的WHERE子句中用通配符字符替换空变量

Php 如何在sql的WHERE子句中用通配符字符替换空变量,php,mysql,Php,Mysql,我通过ajax-post方法将两个变量传递到查询中的WHERE语句中。第二个变量$var2是可选的,可以发送也可以不发送。这意味着第二个变量可以为空,并且查询不会返回任何结果 SELECT table1.* FROM table1 LEFT OUTER JOIN table2 ON table1.table2_id = table2.id WHERE table2.field1 = '".$var1."' AND table2.field2 =

我通过ajax-post方法将两个变量传递到查询中的WHERE语句中。第二个变量$var2是可选的,可以发送也可以不发送。这意味着第二个变量可以为空,并且查询不会返回任何结果

SELECT table1.*
        FROM table1
        LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
        WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
        ORDER BY table2.counter DESC
        LIMIT 10;
我的第一个想法是写if语句,比如

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}
第二个想法是,如果$var2为空,则将*通配符分配给它(这不起作用)

有没有比if语句更好的方法来处理这个问题


谢谢

这种方法是正确的

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}

根据参数添加或删除查询。我认为没有你想要的通配符。即使有,也没关系,因为如果使用
省略第二个语句,那么
也有同样的效果。

这种方法是正确的

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}

根据参数添加或删除查询。我认为没有你想要的通配符。即使有,也没关系,因为如果使用
省略第二个语句,那么
也有同样的效果。

这种方法是正确的

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}

根据参数添加或删除查询。我认为没有你想要的通配符。即使有,也没关系,因为如果使用
省略第二个语句,那么
也有同样的效果。

这种方法是正确的

if(empty($var2)){
   query = ....WHERE table2.field1 = '".$var1."'...
}else{
   WHERE table2.field1 = '".$var1."' AND table2.field2 = '".$var2."'
}

根据参数添加或删除查询。我认为没有你想要的通配符。即使有,也没关系,因为使用
if
省略第二个语句也有同样的效果。

我通常会这样做:

$descriptiveName = !empty($var2) ? "AND table2.field2 = '$var2'" : "";

"SELECT table1.*
FROM table1
LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
WHERE table2.field1 = '$var1'
$descriptiveName
ORDER BY table2.counter DESC
LIMIT 10"

如果
$var2
为空,则将
$descriptiveName
变量设置为空字符串(将被忽略)。以这种方式添加多个条件也很容易,但如果条件太多,通常最好有两个单独的查询。

我通常会这样做:

$descriptiveName = !empty($var2) ? "AND table2.field2 = '$var2'" : "";

"SELECT table1.*
FROM table1
LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
WHERE table2.field1 = '$var1'
$descriptiveName
ORDER BY table2.counter DESC
LIMIT 10"

如果
$var2
为空,则将
$descriptiveName
变量设置为空字符串(将被忽略)。以这种方式添加多个条件也很容易,但如果条件太多,通常最好有两个单独的查询。

我通常会这样做:

$descriptiveName = !empty($var2) ? "AND table2.field2 = '$var2'" : "";

"SELECT table1.*
FROM table1
LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
WHERE table2.field1 = '$var1'
$descriptiveName
ORDER BY table2.counter DESC
LIMIT 10"

如果
$var2
为空,则将
$descriptiveName
变量设置为空字符串(将被忽略)。以这种方式添加多个条件也很容易,但如果条件太多,通常最好有两个单独的查询。

我通常会这样做:

$descriptiveName = !empty($var2) ? "AND table2.field2 = '$var2'" : "";

"SELECT table1.*
FROM table1
LEFT OUTER JOIN table2 ON table1.table2_id = table2.id 
WHERE table2.field1 = '$var1'
$descriptiveName
ORDER BY table2.counter DESC
LIMIT 10"

如果
$var2
为空,则将
$descriptiveName
变量设置为空字符串(将被忽略)。以这种方式添加多个条件也很容易,但如果条件太多,通常最好有两个单独的查询。

以这种或那种方式,您必须动态生成部分脚本,因此只需执行“where的两个版本”选项。\n当$var2为空时,创建不带“field2”的不同查询部分。无论如何,您必须动态生成部分脚本,所以只需执行“where的两个版本”选项。\n当$var2为空时,创建不同的查询,而不使用“field2”部分。无论如何,您必须动态生成部分脚本,所以只需执行“where的两个版本”选项。\n当$var2为空时,创建没有“field2”部分的不同查询。无论如何,您必须动态生成脚本的一部分,因此只需执行“where的两个版本”选项即可。\n当$var2为空时,创建没有“field2”部分的不同查询。我对性能不太担心,但如果方法正确,我将使用它。ThanksI并不担心性能,但如果它的方法正确,我会同意。ThanksI并不担心性能,但如果它的方法正确,我会同意。ThanksI并不担心性能,但如果它的方法正确,我会同意。谢谢