让我说我有一组数字像(3,2,5)我用来分割它们的正常方式和搜索mysql来获取价值就是在PHP中使用explode来拆分它们
实施例
$string = '3,4,5';
$array = explode(',',$string);
foreach($array as $value){
$query = 'SELECT ID FROM TABLE WHERE ID = "'.$value.'"';
}
它的工作方式与此类似,但它使脚本非常慢
我现在需要把这个字符串拆分成自己的查询并返回结果而不用PHP循环?
答案 0 :(得分:3)
使用IN
,
$string = '3,4,5';
$query = "SELECT ID FROM TABLE WHERE ID IN ($string)";
答案 1 :(得分:2)
为什么不是WHERE ... IN ...
?
select ID from TABLE where ID in (3,4,5)
答案 2 :(得分:1)
如果你的$ string变量是:
$string = '3,4,5';
尝试构建您的查询:
$query = 'SELECT ID FROM TABLE WHERE ID in (".$string.")';
你不需要循环。
答案 3 :(得分:0)
您可以使用IN
运算符。
另外,请确保应用正确的转义(在这种情况下,它应该无关紧要,但是当通过网络请求提交字段时它会这样做):
$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);