0

可能重复:
MySQL 选择多个值

假设我有一组像 (3,2,5) 这样的数字,我用来分割它们并搜索 mysql 以获取值的正常方法是在 PHP 中使用爆炸来分割它们

例子

$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)";

另一种奇特的方法是使用准备好的语句:

$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 回答