簡體   English   中英

PHP和MYSQL:如何忽略選擇中的空變量

[英]PHP & MYSQL: How can i neglect empty variables from select

如果我有4個變量,並且我想從數據庫中選擇DISTINCT值

<?php
$var1 = ""; //this variable can be blank
$var2 = ""; //this variable can be blank
$var3 = ""; //this variable can be blank
$var4 = ""; //this variable can be blank

$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE **keywords ='$var1' OR author='$var2' OR date='$var3' OR forums='$var4'** ");

?>

注意:部分或全部變量($ var1,$ var2,$ var3,$ var4)可以為空

我想要什么:我想忽略空字段

可以說$ var1(關鍵字)為空,它將選擇所有空的fileds,但是我想如果$ var1為空,結果將是

$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE author='$var2' OR date='$var3' OR forums='$var4' ");

如果$ var2為空,結果將是

$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE keywords ='$var1' OR date='$var3' OR forums='$var4' ");

如果$ var1和$ var2為空,結果將是

$result = mysql_query("SELECT DISTINCT title,description FROM table WHERE date='$var3' OR forums='$var4' ");

等等

嘗試這個。


$vars = array(
  'keywords' => '', // instead of var1
  'author' => '',  // instead of var2
  'date' => '', // instead of var3
  'forums' => '', // instead of var4
);

$where = array();
foreach ($vars as $varname => $varvalue) {
  if (trim($varvalue) != '') $where[] = "`$varname` = '" . mysql_real_escape_string($varvalue) . "'";
}
$result = mysql_query("SELECT DISTINCT title, description FROM table WHERE " . join(" OR ", $where));

非常感謝每一個特別的實驗 X ..您的回答幫助我獲得了正確的功能,我剛剛用(!empty)替換了(isset)..那么,每件事都會超過OK

$vars = array(
        (!empty($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, 
        (!empty($_GET["var2"]))? " author  = '". $_GET["var2"] ."' ": null,
        (!empty($_GET["var3"]))? " date    = '". $_GET["var3"] ."' ": null,
        (!empty($_GET["var4"]))? " forums  = '". $_GET["var4"] ."' ": null
    );


function myfilterarray($var)
{
    return !empty($var)?$var: null;
}

$newvars = array_filter($vars, 'myfilterarray');

$where = join(" OR ", $newvars);

$sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null);

echo $sql;

使用此功能,如果有空變量,它將被忽略

再次感謝大家的有益建議

在調用mysql_query(...)之前先創建選擇語句字符串,然后執行以下操作:

$queryString = "Select DISTINCT title, description FROM table WHERE";
if(!empty($var1))
   $queryString .= " keywords = $var1";

對於所有變量,依此類推。 您還可以實現for循環並遍歷$ var1-$ var#並檢查!empty($ var#)

為什么不簡單地構建if else結構? 喜歡

if ($var1!="" && $var2!="" && $var3!="" && $var4!=""){
   $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE keywords ='$var1' OR author='$var2' OR date='$var3' OR forums='$var4' ")
} else if ($var2!="" && $var3!="" && $var4!=""){
   $result = mysql_query("SELECT DISTINCT title,description FROM table WHERE author='$var2' OR date='$var3' OR forums='$var4' ");
} else if {
...
}

(我只是在他的重復帖子中張貼了以下內容,因此我在這里重新張貼了以下內容)

如果有任何問題,請原諒我,這已經很晚了,我只是在Windows的記事本中鍵入了此內容,而沒有可以測試的環境。 *請謹慎使用* :)

$vars = array(
'blah1' => '',
'blah2' => '',
'blah3' => '',
);

 $sql_statement = "SELECT first, last FROM names WHERE";

 $clause = "";
 foreach($vars as $k=$v)
{
$k = trim($k);
if(!empty($k))
{
    $clause .= " `$k` = '$v' OR";
}
}
$clause = rtrim($clause, "OR");

// $clause should have what you want.

嗯,有很多方法可以做到這一點,但是我發現的最短的方法是創建以下形式的數組

$vars = array(
        (isset($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null, 
        (isset($_GET["var2"]))? " author  = '". $_GET["var2"] ."' ": null,
        (isset($_GET["var3"]))? " date    = '". $_GET["var3"] ."' ": null,
        (isset($_GET["var4"]))? " forums  = '". $_GET["var4"] ."' ": null
    );

function myfilterarray($var)
{
    return !empty($var)?$var: null;
}

$newvars = array_filter($vars, 'myfilterarray');

$where = join(" OR ", $newvars);

$sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null);

echo $sql;

您對http://localhost/?var1=sadfsadf&var2=sadfasdf&var3=asdfasdf

 SELECT DISTINCT title, description FROM table WHERE keyword = 
 'sadfsadf' OR author = 'sadfasdf' OR date = 'asdfasdf' 

您對http://localhost/?

SELECT DISTINCT title, description FROM table 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM