PHP将数组传递给SQL查询

时间:2014-01-09 19:35:43

标签: javascript php mysql

我从通过JS“检查”的复选框创建一个数组。

简单复选框:

     <div class="checkbox">
          <label>
            <input type="checkbox" name="checkSearch[]" value="One" checked /> One
          </label>
      </div>
      <div class="checkbox">
          <label>
            <input type="checkbox" name="checkSearch[]" value="Two" checked /> Two
          </label>
      </div>
      <div class="checkbox">
          <label>
            <input type="checkbox" name="checkSearch[]" value="Three" checked /> Three
          </label>
      </div>

JS:

        var selectedItems = [];
        $('input[type="checkbox"]:checked').each(function () {
                selectedItems .push($(this).val());
        });

        //passing array in a function
        searchLocations(pass1, pass2, selectedItems);

此时输出的是(假设所有三个复选框均已“选中”):

[“一个”,“两个”,“三个”];

这里我不太确定下一步需要做什么?

我可以将数组包含为URL字符串,稍后在我的SQL语句中使用PHP .implode函数吗?

这是我尝试过的:

function searchLocations(pass1, pass2, selectedItems) {
var searchUrl = 'searchLocations.php?pass1=' + pass1 + '&pass2=' + pass2 + '&selectedItems=' + selectedItems;
...
}

searchLocations.php

$pass1 = $_GET['pass1'];
$pass2 = $_GET['pass2'];
$selectedItems = $_GET['selectedItems'];
$selectedItems = "  '".implode("', '", $selectedItems)."'  ";

$query = sprintf("SELECT * FROM dbtable WHERE pass1 = $pass1 AND pass2 = $pass2 AND selectedItems IN ($selectedItems)");

$ selectedItems需要在SQL查询中如下所示:IN('One','Two','Three')..

1 个答案:

答案 0 :(得分:1)

定义一个内爆并允许你包装元素的函数:

function implode_wrapped($before, $after, $glue, $array) 
{
    $out = '';
    foreach ( $array as $item ){
        $out .= $before.$item.$after.$glue;
    }

    return substr($out, 0, -strlen($glue));
}

然后你可以做像......这样的事情。

内嵌数组值并附加到查询字符串:

implode_wrapped('selectedItems[]=', '', '&amp;', $items);

请注意,我正在使用'selectedItems []'。您的代码 - 函数searchLocations() - 以其当前形式将selectedItems作为数组发送。

内嵌并与SQL一起使用:

implode_wrapped("'", "'", ',', $items);

请注意,您需要清理发送到SQL的任何值,否则被黑客攻击。