在这种情况下如何在IN语句中使用for循环? [英] How can I use for loop in a IN statement in this situation?

查看:136
本文介绍了在这种情况下如何在IN语句中使用for循环?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用for循环select in。我遇到的问题是我在IN语句中有多个值。我知道 IN(term_1,term_2)我们需要一段时间来分隔每一个。当我使用循环,我不知道如何追加时间。首先,它是在语句括号内,而不是在最后。

 <?php 
for($ i = 0; $ i <= 8; $ i ++){
$ stm = $ db-> prepare(SELECT id FROM sign WHERE term IN(:term_ $ i)GROUP BY os.user_id order by COUNT (os.user_id)DESC);

$ stm-> bindParam(:term_ $ i,$ search_text [$ i]);

$ stm-> execute();
}

?>


解决方案

准备语句占位符只能表示SINGLE值。例如

  $ foo ='1,2,3'; 
$ db-> prepare(SELECT ... WHERE foo in(:foo));
bind(':foo',$ foo);

会创建一个查询,解释为

  SELECT ... where foo IN('1,2,3'); 

请注意引号 - 您的三个单独的数字现在是一个单值字符串,如果是这样写的:

  SELECT ... WHERE foo ='1,2,3'
code>

您必须构建一个动态语句,并创建任意数量的占位符。

  foreach($ values as $ val){
$ placeholders [] ='?';

$ sql =SELECT ... WHERE foo IN(。implode(',',$ placeholders)。);
...准备/绑定其他值
$ stmt->执行($ values);


I am using for loop for select in. The issue I am encounter is I have multiple value in the IN statement. I know IN(term_1, term_2) we need a period to separate each one. When I use for loop, I don't know how to append the period. First, it was inside the statement parenthesis instead of at the end.

<?php
for ($i = 0; $i <= 8; $i++) {
    $stm =$db->prepare("SELECT id FROM sign WHERE term IN (:term_$i) GROUP BY os.user_id order by COUNT(os.user_id) DESC ");

        $stm->bindParam(":term_$i", $search_text[$i]);

        $stm->execute();
    }

?>

解决方案

Prepared statement placeholders can only represent SINGLE values.

e.g.

$foo = '1,2,3';
$db->prepare("SELECT ... WHERE foo in (:foo)");
bind(':foo', $foo);

would create a query that's interpreted as

SELECT ... WHERE foo IN ('1,2,3');

Note the quotes - your three separate numbers are now a single-valued string, and the query runs as if it had been written:

SELECT ... WHERE foo='1,2,3'

You'd have to build a dynamic statement and create as many placeholders as you have values.

foreach ($values as $val) {
     $placeholders[] = '?';
}
$sql = "SELECT ... WHERE foo IN (" . implode(',', $placeholders) . ")";
...prepare/bind other values
$stmt->execute($values);

这篇关于在这种情况下如何在IN语句中使用for循环?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆