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