如何使用PHP PDO枚举/计数查询中显示的所有参数?
我有以下疑问:如何使用PHP PDO枚举/计数查询中显示的所有参数?,php,sql,pdo,Php,Sql,Pdo,我有以下疑问: $query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3" PHP PDO(或任何其他事物/库)是否具有列出此查询中显示的所有参数名称的函数,其编写方式如下: print_r(list_query_parameters($query)); Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
PHP PDO(或任何其他事物/库)是否具有列出此查询中显示的所有参数名称的函数,其编写方式如下:
print_r(list_query_parameters($query));
Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$stmt = $pdo->prepare($query)
$stmt->execute($params);
$stmt->debugDumpParams();
生成如下输出:
print_r(list_query_parameters($query));
Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$stmt = $pdo->prepare($query)
$stmt->execute($params);
$stmt->debugDumpParams();
编辑:答案的最终解决方案(其他备选方案见下文) 功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
程序输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
你也可以利用这一点 说明 public void PDOStatement::debugDumpParams(void)转储 由准备好的语句直接包含在输出上的信息。 它将提供使用中的SQL查询、使用的参数数量 (Params),参数列表,其名称、类型(paramtype)如下 整数、它们的键名或位置以及在查询中的位置 (如果PDO驱动程序支持,则为-1)
需要注意的事项:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
只有在运行execute()
后才能获得转储,因此代码如下所示:
print_r(list_query_parameters($query));
Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$stmt = $pdo->prepare($query)
$stmt->execute($params);
$stmt->debugDumpParams();
debugDumpParams()
没有执行您真正想要的操作
我刚刚写了这个函数,它应该做你想做的事情
请注意,它既快又脏:
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
使用正则表达式:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
这是正则表达式
preg_match_all('/\s*\w+\s*[=<>]\s*\:(\w+)/', $subject, $matches);
print_r($matches[1]);
preg\u match\u all('/\s*\w+\s*[=]\s*\:(\w+/”,$subject,$matches);
打印($matches[1]);
编辑:答案的最终解决方案(其他备选方案见下文)
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
程序输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
你也可以利用这一点 说明 public void PDOStatement::debugDumpParams(void)转储 由准备好的语句直接包含在输出上的信息。 它将提供使用中的SQL查询、使用的参数数量 (Params),参数列表,其名称、类型(paramtype)如下 整数、它们的键名或位置以及在查询中的位置 (如果PDO驱动程序支持,则为-1)
需要注意的事项:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
只有在运行execute()
后才能获得转储,因此代码如下所示:
print_r(list_query_parameters($query));
Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$stmt = $pdo->prepare($query)
$stmt->execute($params);
$stmt->debugDumpParams();
debugDumpParams()
没有执行您真正想要的操作
我刚刚写了这个函数,它应该做你想做的事情
请注意,它既快又脏:
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
使用正则表达式:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
这是正则表达式
preg_match_all('/\s*\w+\s*[=<>]\s*\:(\w+)/', $subject, $matches);
print_r($matches[1]);
preg\u match\u all('/\s*\w+\s*[=]\s*\:(\w+/”,$subject,$matches);
打印($matches[1]);
编辑:答案的最终解决方案(其他备选方案见下文)
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
程序输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
你也可以利用这一点 说明 public void PDOStatement::debugDumpParams(void)转储 由准备好的语句直接包含在输出上的信息。 它将提供使用中的SQL查询、使用的参数数量 (Params),参数列表,其名称、类型(paramtype)如下 整数、它们的键名或位置以及在查询中的位置 (如果PDO驱动程序支持,则为-1)
需要注意的事项:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
只有在运行execute()
后才能获得转储,因此代码如下所示:
print_r(list_query_parameters($query));
Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$stmt = $pdo->prepare($query)
$stmt->execute($params);
$stmt->debugDumpParams();
debugDumpParams()
没有执行您真正想要的操作
我刚刚写了这个函数,它应该做你想做的事情
请注意,它既快又脏:
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
使用正则表达式:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
这是正则表达式
preg_match_all('/\s*\w+\s*[=<>]\s*\:(\w+)/', $subject, $matches);
print_r($matches[1]);
preg\u match\u all('/\s*\w+\s*[=]\s*\:(\w+/”,$subject,$matches);
打印($matches[1]);
编辑:答案的最终解决方案(其他备选方案见下文)
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
程序输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
你也可以利用这一点 说明 public void PDOStatement::debugDumpParams(void)转储 由准备好的语句直接包含在输出上的信息。 它将提供使用中的SQL查询、使用的参数数量 (Params),参数列表,其名称、类型(paramtype)如下 整数、它们的键名或位置以及在查询中的位置 (如果PDO驱动程序支持,则为-1)
需要注意的事项:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
只有在运行execute()
后才能获得转储,因此代码如下所示:
print_r(list_query_parameters($query));
Array ( [0] => :param1 [1] => :param2 [2] => :param3 )
$stmt = $pdo->prepare($query)
$stmt->execute($params);
$stmt->debugDumpParams();
debugDumpParams()
没有执行您真正想要的操作
我刚刚写了这个函数,它应该做你想做的事情
请注意,它既快又脏:
功能
function list_query_parameters($query) {
preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
return $params[1]
}
function list_query_parameters($query) {
$params = explode(":", $query);
unset($params[0]);
foreach ($params as $param) {
$param = split(" ", $param);
$result[] = $param[0];
}
return $result;
}
用法:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
输出
Array
(
[0] => :param1
[1] => :param2
[2] => :param3
)
Array ( [0] => param1 [1] => param2 [2] => param3 )
使用正则表达式:
$query = "SELECT * FROM a_table WHERE col1=:param1 AND col2=:param2 OR col3=:param3"
print_r(list_query_parameters($query));
这是正则表达式
preg_match_all('/\s*\w+\s*[=<>]\s*\:(\w+)/', $subject, $matches);
print_r($matches[1]);
preg\u match\u all('/\s*\w+\s*[=]\s*\:(\w+/”,$subject,$matches);
打印($matches[1]);
如果您有一个硬编码查询,为什么需要它?只是想更好地理解你在这里想做什么。如果你愿意,你可以自己写。所有以等号冒号开头的字符串的查询字符串上的Regex?我不知道我的查询的参数,我的查询每次都会更改,我需要使用具有相同na的cookie填充这些查询的参数