0

重複の可能性:
MySQL Select Multiple VALUES

(3,2,5) のような数値のグループがあるとしましょう

$string = '3,4,5';
$array = explode(',',$string);
foreach($array as $value){
    $query = 'SELECT ID FROM TABLE WHERE ID = "'.$value.'"';
}

このように機能しますが、スクリプトが非常に遅くなります

この文字列をクエリ自体に分割し、PHP でループせずに結果を返す必要がある場合は、今すぐ必要ですか?

4

4 に答える 4

3

を使用INして、

$string = '3,4,5';
$query = "SELECT ID FROM TABLE WHERE ID IN ($string)";
于 2012-10-03T03:37:09.873 に答える
2

なぜWHERE ... IN ...ですか?

select ID from TABLE where ID in (3,4,5)
于 2012-10-03T03:37:14.367 に答える
1

$string変数が次の場合:

$string = '3,4,5';

次のようにクエリを作成してみてください。

$query = 'SELECT ID FROM TABLE WHERE ID in (".$string.")';

このためのループは必要ありません。

于 2012-10-03T03:38:24.957 に答える
1

IN演算子を使用できます。

また、必ず適切なエスケープを適用してください (この場合は問題になりませんが、フィールドが Web リクエスト経由で送信された場合は問題になります)。

$string = '3,4,5';
$array = explode(',', $string);

// cast all array elements into integers
$numbers = join(',', array_map('intval', $array));

$query = "SELECT ID FROM TABLE WHERE ID IN ($numbers)";

もう 1 つの優れた方法は、準備済みステートメントを使用することです。

$placeholders = join(',', array_fill(0, count($array), '?'));
$query = "SELECT ID FROM TABLE WHERE ID IN ($placeholders)";

次に、クエリを実行するには、次のように数値をバインドします (PDO の例):

// prepare the query, looks like 'WHERE ID IN (?,?,?)'
$stmt = $db->prepare($query);
// execute the query and pass the array values
$stmt->execute($array);
于 2012-10-03T03:43:35.350 に答える