Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP PDO枚举/计数查询中显示的所有参数?_Php_Sql_Pdo - Fatal编程技术网

如何使用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填充这些查询的参数