1

phpを入力と出力として使用し、sqlを使用してデータを選択およびフィルタリングする高度な検索コードを開発する際に問題が発生しました。

phpコード:

<form action="index.php?Type=Advance" method="post">
      <input type="text"   name="name">
                <input type="text"   name="sponsor">

    <select size="1" name="gender" id="">
    <option value="male">male</option>
    <option value="female">female</femal>
</select>
                       <select size="1" name="address" id="">
    <option value="x">x</option>
    <option value="y">y</option>
    <option value="z">z</option>
       </select>
             <input type="submit">
  </form>

次に、変数を宣言します

パブリック関数AdvanceSearch($ name、$スポンサー、$ sex、$ address){

$cheack = "";
if(isset($name)&&$name != ""){
    $cheack.="  name =  '$name' ";
}
if(isset($sponsor)&&$sponsor != ""){
    $cheack.=" AND sponsor =  '$sponsor' ";
}
if(isset($gender)&&$gender != ""){
    $cheack.=" AND gender =  '$gender' ";
}
if(isset($address) &&$address != "" ){
    $cheack.=" AND workplace =  '$address' ";
}
   $DB = mysql_query("SELECT * FROM table WHERE 1 =  1 ".$cheack);
   echo "SELECT * FROM user WHERE ".$WHQ;
   exit();

実際には機能しますが、名前を挿入しなかった場合...sqlステートメントは次のようになります

SELECT * 
FROM table 
WHERE AND sponsor = 'www' 
    AND gender = 'male'

名前を挿入せずにテーブルを検索したい場合はどうすればよいですか..名前を挿入しなかった場合にSQLステートメントを機能させるにはどうすればよいですか。

4

2 に答える 2

3

これに対する一般的な解決策は、常に最初に真の条件(など)を追加することです1=1。余分な条件のないクエリは次のようになります

SELECT * FROM table WHERE 1=1

条件を追加するときANDは、最初または最後の条件に特別なケースを付けずに、条件を最後に追加するだけです。

SELECT * FROM table WHERE 1=1 AND sponsor = 'www' AND gender = 'male'

ANDの代わりにORを使用した場合、最初の条件は。のようにfalseである必要があることに注意してください0=1

于 2013-03-24T12:25:19.663 に答える
0

次のようなフラグ変数を使用できます。

$cheack = "";
$flag = False;

if(isset($name)&&$name != ""){
 $cheack.="  name =  '$name' ";
 $flag =True;
}

if(isset($sponsor)&&$sponsor != ""){
 if($flag){
  $cheack.="AND ";
 }
 $cheack.="sponsor =  '$sponsor' ";
}

if(isset($gender)&&$gender != ""){
 if($flag){
  $cheack.="AND ";
 }
 $cheack.="gender =  '$gender' ";
}

if(isset($address) &&$address != "" ){
 if($flag){
  $cheack.="AND ";
 }
 $cheack.="workplace =  '$address' ";
}
于 2013-03-24T12:29:36.163 に答える