Php 如何从url获取动态信息?

Php 如何从url获取动态信息?,php,mysql,get,Php,Mysql,Get,我拥有的是一个动态URL。_get的数量将发生变化,并且值也不同。我正在使用_gets的值来构建一个mysql查询,但是在从url中获取它们时遇到了麻烦 现在,我有这个: preg_match_all('/&field_\d+/', $_SERVER['QUERY_STRING'], $matches); 这是一场比赛,我只是不知道从这里走到哪里,或者这是一个正确的方法。我只需要它在所有字段中循环并返回它们的值,以便在构建查询时使用它们 有人能给我指出正确的方向吗?我已经试了一段时间了

我拥有的是一个动态URL。_get的数量将发生变化,并且值也不同。我正在使用_gets的值来构建一个mysql查询,但是在从url中获取它们时遇到了麻烦

现在,我有这个:

preg_match_all('/&field_\d+/', $_SERVER['QUERY_STRING'], $matches);
这是一场比赛,我只是不知道从这里走到哪里,或者这是一个正确的方法。我只需要它在所有字段中循环并返回它们的值,以便在构建查询时使用它们

有人能给我指出正确的方向吗?我已经试了一段时间了,现在可能想得太多了


谢谢

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

$real_columns = array("field1", "field2", "field3");
过滤$\u GET superglobal,以便只包含键与列匹配的子集:

$inputs = array_intersect_key($_GET, array_flip($real_columns));
创建
字段=?
术语的数组:

$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));

我不太明白你的意思,但我假设你想从未知变量名的查询字符串中获取值?如果是这样,请使用$\u GET superglobal并在其中循环

大概是这样的:

foreach($_GET as $var => $value){
    //build your query or whatever 
}
<input name="field_1" ... />
<input name="field_2" ... />
...
<input name="field_n" ... />

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

首先也是最重要的一点,无论您在哪里构建查询字符串,都应该使用数组访问表示法。假设您当前有一个表单,其字段如下:

foreach($_GET as $var => $value){
    //build your query or whatever 
}
<input name="field_1" ... />
<input name="field_2" ... />
...
<input name="field_n" ... />
如果不需要强制执行顺序,则可以使用
[]
方括号来获取0索引的数字数组

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

您应该注意的第二个工具是
parse\u str()
。如果您有机会像您正在尝试的那样实际解析查询字符串,请使用此选项(不要使用
explode()


什么是_gets?听起来在构建查询字符串时需要使用数组访问表示法。类似于
fields[0]=foo&fields[1]=bar&fields[2]=abc
这样,您只需在
$\u GET['fields]
中访问一个漂亮的预构建数组中的所有字段即可。只要知道,任何时候你看到自己在代码中做一些类似于
key_35;
的事情,这是一种反模式,你可能应该使用数组。这对我很有用,非常感谢。我知道我想得太多了。我的代码比需要的多得多。所以我用了这个:
foreach($\u GET as$var=>$value){if(preg\u match('/field\ud+/',$var)){$build\u query.='和'$var.='.$value;}}
$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] => ...
        )
    )
    */