Php Where上的SQL和条件逻辑

Php Where上的SQL和条件逻辑,php,mysql,Php,Mysql,我有一个非常简单的SQL搜索查询,如下所示 $sql = " SELECT * FROM suppliers WHERE product_categories LIKE '%$product_categories1%' AND agentid=????? "; 在查询的agentid=???部分中,我需要获得以下条件才能工作 如果某个$var是(比如)1,那么agentid!='' 如果相同的$va

我有一个非常简单的SQL搜索查询,如下所示

$sql = 
"
SELECT *
FROM suppliers
WHERE                       
product_categories LIKE '%$product_categories1%'                        
AND agentid=?????
";
在查询的
agentid=???
部分中,我需要获得以下条件才能工作

如果某个
$var
是(比如)1,那么
agentid!=''
如果相同的
$var
是(比如)2,那么
agentid='

此查询的目的是<代码>如果!=''
查询返回有agentid值的所有行
(!=“”)
,或者如果agentid设置为
(=“”)
,则SQL不返回任何行

我的问题是如何编写SQL来引入这个简单条件

PS我知道
sql替代方案

您可以这样尝试:

if ($var == 1)
    $where = "agentid != ''";
else
    $where = "agentid like ''";

$sql = 
" SELECT *
    FROM suppliers
  WHERE                       
    product_categories LIKE '%$product_categories1%'                        
  AND $where ";

如果我正确理解了您的问题,那么您希望有条件地构建SQL查询。您可以使用控制语句更改输出SQL的内容:

// ALWAYS ALWAYS ALWAYS sanitize your input.  Use prepared statements to
// build safe queries (see first comment under this answer).  This example
// of using msqli_escape_string is NOT considered "secure", but is used in
// this context to highlight the importance of sanitization.
$product_categories1 = msqli_escape_string($product_categories1);

if ($var == 'condition') {
    $condition = "agentid IS NOT NULL";
}
else {
    $condition = "agentid IS NULL";
}

$sql = "SELECT * FROM suppliers
        WHERE product_categories LIKE '%$product_categories1%'                        
        AND $condition";

SQL-->不为空或为空,不为!=or=''在查询之前,使用php为
$agent\u id
变量赋值,然后在查询中使用该变量。这样,根据条件,
$agent\u id
变量将已经具有预期值。但是
$var
可以是1还是2?或者还有其他值?那么告诉我如何分配!=。显然,可以使用条件php语句设置一个var,然后将其分配给agentid。这不是问题所在$var是任意的。它只是用作切换agentid=''或agentid!=''的一种方式这些值可以是任何值,True-false等等。尽管您的答案看起来是正确的(基于OP所写的内容),但我不会对此进行投票,因为这段代码存在sql注入的危险。SorryAnd
agentid=''
不是有效的sql语法Wow在mysql中是否可以工作让我试试Filipe。如果工作正常,请向上投票
类似
应与模式一起使用。使用
=
与文字字符串进行比较。我不知道的是你可以这样做------->$condition@AlonEitan我知道,因此对准备好的声明发表了评论。但是我会把答案简化为更多地强调使用事先准备好的陈述。我投票赞成这一点额外的灵感,谢谢you@Wrinn酷。当代码是安全的(而且不仅有效)时,我会很高兴地进行投票,因为我不想让OP离开,所以有一天他们可能会错误地使用它,然后他们的网站会被黑客攻击。