0

複数の基準フィールドを持つ検索システムを作成しようとしています。私の質問は、空の基準フィールドを処理する方法です (ユーザーによって省略されています)。AND 条件を実装するために、変数が空の場合はどうなるかを確認する必要があります。私の場合、姓が必要なので、id 名と ID が空のフィールドではないことを確認する必要があります。

$query ="SELECT first_name, last_name FROM students  WHERE last_name ILIKE '%$last_name%' ";


if(isset($_GET['$first_name']))
$condition[]="first_name ILIKE '%$first_name'";

if(isset($_GET['$ID']))
$condition[]="ID = '$ID'";



if(!empty($condition))
$query .= implode(' AND ',$condition);

$result = pg_query($query); 

これは機能しません。

4

4 に答える 4

1

私はあなたが行方不明だと思いますAND

if(!empty($condition))   
    $query .= ' AND '.implode(' AND ',$condition);
于 2012-12-08T09:56:51.380 に答える
1

おそらく、GETから要求している変数が間違っているため$、名前の後に記号が付いています。

また、クエリを実行する前に印刷して、適切にフォーマットされているかどうかを確認することもできます。

これを試して、結果を投稿してください。

$query ="SELECT first_name, last_name FROM students WHERE last_name ILIKE '%$last_name%' ";

if(isset($_GET['$first_name']))
$condition[]="first_name ILIKE '%$first_name'";

if(isset($_GET['$ID']))
$condition[]="ID = '$ID'";


if(!empty($condition))
$query .= implode(' AND ',$condition);
echo $query; exit();
$result = pg_query($query); 
于 2012-12-08T09:57:40.100 に答える
1

ロジックは機能するはずですが、基本的なPHPの構文と原則が不足しているようです。

私はあなたが持っていると推測しています:

<input type='text' name='ID' />

いいえ

<input type='text' name='$ID' />

したがって、を使用する必要があります$_GET['id']


次のことは、新しいバージョンのphpで非推奨になっている登録済みのグローバルを頼りにしているようです。

次を使用する必要があります。

$condition[]="ID = '" . $_GET['ID'] . "'";

あなたは収入の価値を逃れていません、使用してpg_escape_string()ください:

$condition[]="ID = '" . pg_escape_string( $connection, $_GET['ID']) . "'";

アレイを初期化していないので$conditions、次を追加します。

$conditions = array();

スクリプトの先頭まで


AND最終的なクエリを作成しているときに欠落しています:

if( count( $conditions)){
    $query .= ' AND ' . implode( ' AND ', $conditions);
}

last_nameまたは、次のように追加することもできます$conditions

$query ="SELECT first_name, last_name FROM students  WHERE ";
$conditions = array(
    "last_name ILIKE '%" . 
         pg_escape_string($connection, $_GET['last_name']) . 
         "%'"
);
// ...
$query .= implode( ' AND ', $conditions);
于 2012-12-08T09:59:26.327 に答える
0

Pomm の Whereクラスを見てください。AND / OR 基準を簡単に作成し、それらをエスケープするために値にバインドすることができます。このようにして、複数の選択リストを使用し、それらを OR 句で結合し、他の基準を持つものを AND で結合できます。

于 2012-12-11T12:58:14.763 に答える