如何从url获取动态_gets?

时间:2014-02-14 00:25:58

标签: php mysql get

我拥有的是动态网址。 _gets的数量将发生变化,值也会不同。我使用_gets的值来构建一个mysql查询,但是我无法将它们从网址中删除。

现在,我有这个:

preg_match_all('/&field_\d+/', $_SERVER['QUERY_STRING'], $matches);

它正在进行比赛,我只是不确定从哪里开始,或者这甚至是正确的方法。我只需要它遍历所有字段_#并返回它们的值,以便我可以使用它们来构建查询。

有人能指出我正确的方向吗?我已经尝试了一段时间,我现在可能已经过度思考了。

谢谢

3 个答案:

答案 0 :(得分:1)

首先从表格中实际存在的列数组开始:

$real_columns = array("field1", "field2", "field3");

过滤$ _GET超全局,这样您只能使用与列匹配的子集:

$inputs = array_intersect_key($_GET, array_flip($real_columns));

创建一个field = ?个术语的数组:

$terms = array_map(
    function($field) { return "`$field`=?"; }, 
    array_keys($inputs)
);

准备SQL语句:

$sql = "SELECT * FROM mytable ";
if ($terms) {
    $sql .= "WHERE " . implode(" AND ", $terms);
}

$stmt = $pdo->prepare($sql);
$stmt->execute(array_values($inputs));

答案 1 :(得分:0)

我不太清楚你的意思,但我假设你想从一个包含未知变量名的查询字符串中获取值?如果是这样,请使用$ _GET超全局并循环遍历它。

类似的东西:

foreach($_GET as $var => $value){
    //build your query or whatever 
}

答案 2 :(得分:0)

您没有理由使用这种方法。您可以使用许多工具,这些工具比使用某些正则表达式方法逻辑要好得多。

首先,无论您在何处构建查询字符串,都应该使用数组访问表示法。所以,假设您目前有一个包含以下字段的表单:

<input name="field_1" ... />
<input name="field_2" ... />
...
<input name="field_n" ... />

你应该这样做:

<input name="field[1]" ... />
<input name="field[2]" ... />
...
<input name="field[n]" ... />

当您通过GET提交表单时,这将在$_GET['field']中为您提供一个很好的数组,其中包含括号内的值。像这样:

var_dump($_GET['field']);

/*
Outputs something like
Array(
    [1] => ...,
    [2] => ...,
    ...
    [n] => ...
)
*/

如果您不需要强制执行订单,则可以使用[]括号来获取0索引数字数组。

您现在拥有所有值,而不对字符串进行任何正则表达式解析。

您应该注意的第二个工具是parse_str()。如果您曾经有过实际解析查询字符串的问题,请使用此方法(不要使用explode())。

$query_string = 'field[1]=foo&field[2]=bar...'; // some query string
$query_string_data = array();

parse_str($query_string, $query_string_data);
var_dump($query_string_data);

    /*
    Outputs something like
    Array(
        'field' => Array (
            [1] => ...,
            [2] => ...,
            ...
            [n] => ...
        )
    )
    */