2

私は多くの OR ステートメントでクエリを生成する必要があるコードを書いていますが、これには次の方法よりも快適な方法があると思います。

foreach ($plz as &$value) {
    if (empty($i)) {
        $query = "WHERE plz='$value'";
    } else {
        $query = "$query OR plz='$value'";
    }
    $i++;
}
$sql = mysql_query("SELECT * FROM table $query");
while ($data = mysql_fetch_array($sql)) {
    //do something
}
4

3 に答える 3

2

あなたが探しています ;

SELECT * FROM table WHERE plz in ('value1', 'value2', 'value3')

SQL インジェクションに注意してください...

于 2012-09-27T07:11:00.820 に答える
2

列が取る可能性のある複数の値がある場合は、IN演算子を使用してそれらを接続するだけです。

書く代わりに

... WHERE col=1 OR col=2 OR col=3

書くだけ

... WHERE col IN (1,2,3)

PHP ですべてのエントリを収集するには、配列implode()以降を使用します。

// collecting values
$vals = array();
$vals[] = 1;
$vals[] = 2;
// ...

// add them to your query
$query .= ' WHERE col IN ( ' . implode( ',', $vals ) . ')';

// execute the query ...

値が整数ではなく、クエリ内でアポストロフィで囲む必要がある場合は、最初にそのように配列に挿入します。

$vals[] = "'my string value'";
于 2012-09-27T07:12:02.203 に答える
1

plzが INT 型で、すべて$plzが整数の場合:

$query = 'WHERE plz IN( ' . implode(',', $plz) . ')';

動作します。そうでなければ、これを試してみるとうまくいくかもしれません(テストされていません):

$query = 'WHERE plz IN( \'' . implode("','", $plz) . '\')';
于 2012-09-27T07:10:43.187 に答える