基于值传递的条件where子句

时间:2013-07-28 15:09:36

标签: php mysql

在php中我有一个mysql查询,如果传递的值不为空,则只应包含where子句。

不幸的是,mysql似乎不起作用。你能告诉我我做错了吗?

if (isset($_GET['q'])) 
                {
                $q =  $_GET['q'];

                }
else
                $q ="";



$query = mysql_query("Select q1.Umsatz, kundendatenbank.Kundenname from

(SELECT sum(rechnung.Betrag) as Umsatz, kundendatenbank.Hauptname 
fROM auftrag
JOIN rechnung ON rechnung.Auftragsnummer = auftrag.Auftragsnummer
JOIN kundendatenbank ON auftrag.Kundennummer=kundendatenbank.Kundennummer

JOIN auftrag_ma on auftrag.Auftragsnummer=auftrag_ma.Auftragsnummer";

if ($q!="")
        $query =  $query." where Quarter(auftrag_ma.Datum)='$q'";


$query = $query."group by kundendatenbank.Hauptname)q1
join kundendatenbank on q1.Hauptname=kundendatenbank.Kundennummer");

2 个答案:

答案 0 :(得分:1)

  1. 完全定义后运行查询。您不能在函数调用中包含if语句。
  2. 转义$ q param以保护自己免受SQL注入。我做了if语句。
  3. mysql_ *函数已弃用,请考虑切换到PDO或mysqli。
  4. $query = "Select q1.Umsatz, kundendatenbank.Kundenname from
    
    (SELECT sum(rechnung.Betrag) as Umsatz, kundendatenbank.Hauptname 
    FROM auftrag
    JOIN rechnung ON rechnung.Auftragsnummer = auftrag.Auftragsnummer
    JOIN kundendatenbank ON auftrag.Kundennummer=kundendatenbank.Kundennummer
    JOIN auftrag_ma ON auftrag.Auftragsnummer=auftrag_ma.Auftragsnummer";
    
    if ($q != "")
    {
       $q = mysql_real_escape_string($q);
       $query =  $query." where Quarter(auftrag_ma.Datum)='$q'";
    }
    
    
    $query = $query." GROUP BY kundendatenbank.Hauptname) q1
    join kundendatenbank on q1.Hauptname=kundendatenbank.Kundennummer";
    
    $result = mysql_query($query);
    

答案 1 :(得分:0)

实际上你所要做的就是它应该有效。如果没有选择任何内容而没有弄乱您的查询,那么where将保持为空。

    if (isset($_GET['q'])) 
            {
            $q =  $_GET['q'];
            $whereclause = "WHERE <insert your table.columnname> = '".$q ."'";

            }
    else {
            $whereclause = "";
    }


    $query = mysql_query("Select q1.Umsatz, kundendatenbank.Kundenname from

    (SELECT sum(rechnung.Betrag) as Umsatz, kundendatenbank.Hauptname 
    FROM auftrag
    JOIN rechnung ON rechnung.Auftragsnummer = auftrag.Auftragsnummer
    JOIN kundendatenbank ON auftrag.Kundennummer=kundendatenbank.Kundennummer

    JOIN auftrag_ma on auftrag.Auftragsnummer=auftrag_ma.Auftragsnummer $whereclause";       


    $query = $query."group by kundendatenbank.Hauptname)q1
    join kundendatenbank on q1.Hauptname=kundendatenbank.Kundennummer");