如何在jquery中的SELECT查询中传递多个参数?

时间:2013-08-31 10:09:43

标签: php jquery html mysql

我正在使用下面的文本框添加标签。

enter image description here

当我输入任何标签(在这里说'Java')然后按回车键时,会调用jquery的tagit()。

$(function () {

  var availableTagname = [<?=$testTagname?>];

  $('#demo4').tagit({tagSource:availableTagname, sortable:true, tagsChanged:function (a) {
      Counttagname(a);
  } });

'a'是文本框的值。 a = java here。然后调用Counttagname()。

function Counttagname(value)
{    
 if(value!="")
    {  
        if (window.XMLHttpRequest)
        {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp=new XMLHttpRequest();
        }
        else
        {// code for IE6, IE5
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState==4 && xmlhttp.status==200)
            {                            document.getElementById("divcounttagname").innerHTML="";
                      document.getElementById("divcounttagname").innerHTML=xmlhttp.responseText;
            }
        }
 //         alert(value);
        xmlhttp.open("GET","<?=base_url()?>index.php/admins/joborders/bindcounttagname/"+value,true);
        xmlhttp.send();
    }
    else
    {
        document.getElementById("divcounttagname").innerHTML='';
        document.getElementById("divcounttagname").innerHTML='<div>There are no Candidate</div>';
    }

}

该值(即'java')在“xmlhttp.open(”GET“,”index.php / admins / joborders / bindcounttagname /“+ value,true)中传递;”

现在,在controllder中调用bindcounttagname()。

function bindcounttagname($value)
{   

    $this->load->model('mjoborders');
    $data['counttagname'] = $counttagname = $this->mjoborders-    >Getcounttagname($value);

然后在模型中调用Getcounttagname()。

function Getcounttagname($value)
{   
    $data = array();    
    $Q = $this->db->select('*,count(candidateid) as countcandidate FROM tbl_candidatetag where tagname = "'.$value.'"');
    $Q = $this->db->get();

    if ($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row)
        {   

            $data[] = $row;             
        }
    }       
    $Q->free_result();          
    return $data; 
}

标记作为上述查询中的参数传递。

但是,当我输入第二个标签时,标签也应该传入带有早期标签的查询,即IN('java','css3');

但它不需要多个值作为参数。

我尝试使用数组在查询中传递更多标签,如下面的链接,但查询不会获取任何行.. 1.“Passing an array to a query using a WHERE clause” 2.在查询中也传递了静态的两个值,但它没有获取任何行。

请告诉我如何在查询中传递多个标记作为参数。

2 个答案:

答案 0 :(得分:0)

如果可以将多个参数传递给Getcounttagname,我会像这样重写:

function Getcounttagname($value1, $value2, ...)
{   
    $values = func_get_args();
    $val_str = implode("', '", $values);
    $data = array();    
    $Q = $this->db->select("*,count(candidateid) as countcandidate FROM tbl_candidatetag where tagname IN('".$val_str."'");
    $Q = $this->db->get();

    if ($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row)
        {   

            $data[] = $row;             
        }
    }       
    $Q->free_result();          
    return $data; 
}

我正在做的是将所有参数放入一个如下所示的字符串:'a', 'b', 'c'并使用它们构建sql查询。因此,最终查询看起来像select * from tbl_candidatetag where tagname IN('a', 'b', 'c'),这样所有这些标记都将包含在结果集中。

答案 1 :(得分:0)

引用的答案应该有效,但是你必须确保用引号括起字符串中的每个元素。该示例适用于数字,但如果您不使用引号括起您的值,则查询将认为您引用变量而不是字符串文字。所以从另一个问题来看,而不是使用:

$value = join(',',$value); 

你想要使用

$value = "'" . implode("','", $value) . "'";

所以你的功能将是

 function Getcounttagname($value)
{
    $value = "'" . implode("','", $value) . "'";

    $data = array();    
    $Q = $this->db->select('*,count(candidateid) as countcandidate FROM tbl_candidatetag where tagname = "'.$value.'"');
    $Q = $this->db->get();

    if ($Q->num_rows() > 0)
    {
        foreach ($Q->result_array() as $row)
        {   

            $data[] = $row;             
        }
    }       
    $Q->free_result();          
    return $data; 
}

你也可以通过使用jQuery .ajax函数使ajax代码更容易,因为你已经在利用jQuery了。

http://api.jquery.com/jQuery.ajax/