たとえばWHEREワードを使用してmysql検索を実行する方法を知っています。しかし、私の問題は、さまざまな値を検索する必要があることですが、これらの値は数が異なる可能性があります。例えば:
Name、LastName、Ageの3つの変数を検索できますが、他の検索ではName、Ageの2つの変数を検索できます。
検索する値の量に関係なく、同じスクリプトでMYSQL検索を実行する方法はありますか?
一定量の変数の検索を「強制」することをお勧めします。
ありがとう。!
ロベルト
IMHO、検索を固定数の変数に制限する方がはるかに優れています。そうすれば、特定の質問に一般的な答えを当てはめようとするのではなく、特定の理由で特定の質問に答えることができます。検索条件を制限すると、ステートメントのデバッグとパフォーマンスのベンチマークが容易になります。
お役に立てれば。
検索パラメーターに変数を使用し、それをクエリに挿入するだけです。関数/メソッドで、変数を適切な形式にすることを確認してください (これは、さまざまな値を選択する方法によって異なります)。
SELECT *
FROM db
$variable;
WHERE
empty/required を持つことを恐れずに値が渡されない限り(つまり、データベースの一般的な検索にこの同じクエリを使用できることを意味します)、句は表示されません$variable
。
構築$variable
するときは、句を含める必要がありWHERE
ます。次に、追加する各値を適切な形式で (おそらくループで) 挿入します。
これが理にかなっていることを願っています。そうでない場合はお知らせください。明確にしようと思います。これは、ほとんどの人がページネーションの際に使用する方法と同じです (ただし、変数を のLIMIT
代わりに に配置しますWHERE
) 。
編集:
また、注入前に変数を適切にサニタイズしてください。
クエリを動的に構築する簡単な例:
$conditions = array();
if (...) {
$conditions['age'] = $age;
}
if (...) {
$conditions['name'] = $name;
}
...
if (!$conditions) {
die('No conditions supplied');
}
// if you're still using the mysql_ functions and haven't done so before:
$conditions = array_map('mysql_real_escape_string', $conditions);
foreach ($conditions as $field => &$value) {
$value = "`$field` = '$value'";
}
$query = 'SELECT ... WHERE ' . join(' AND ', $conditions);
作成したい正確なクエリを動的に組み合わせることは、実際には難しくありません。SQL 構文を台無しにしたり、インジェクションの脆弱性にさらされたりしないように注意してください。データベース抽象化レイヤーを調べてみるとよいでしょう。これにより、$conditions
配列を関数に渡して、そこから実際のクエリを構築することができます。多かれ少なかれ、上記の方法と同じです。