gpt4 book ai didi

php - `pg_query_params` 和参数太多

转载 作者:行者123 更新时间:2023-11-29 12:20:42 24 4
gpt4 key购买 nike

可以使用pg_query_params 方法查询数据库,例如:

pg_query_params($connection, 'SELECT foo FROM bar WHERE id=$1 AND name=$2',array("Foobar","Qux"));

但是,当查询未使用所有参数时,例如使用 SELECT foo FROM bar WHERE id=$1 查询时,会收到以下错误:

Query failed: ERROR: bind message supplies 2 parameters, but prepared statement "" requires 1

为什么 pg_query_params 如此严格?可以“构造”查询并简单地动态添加测试。可以“关闭”这种行为吗?提供可能(不)使用比一次提供的参数更少的查询的替代方案是什么?

最佳答案

它可能只是将准备好的语句语法包装在 postgres 中。

PREPARE fooplan (int, text, bool, numeric) AS
INSERT INTO foo VALUES($1, $2, $3, $4);
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);

因此,如果 postgres 使用该额外变量执行您的语句,它只会捕获 postgres 抛出的异常。

Postgresl Prepare Documentation

编辑:环顾四周,它似乎从 postgresql C 库 libpq 调用 PQExecParams。 http://www.postgresql.org/docs/9.1/static/libpq-exec.html#LIBPQ-PQEXECPARAMS

如果你真的需要 pg_query_params 来获取多余的参数,为什么不写一个包装器来 preg_match 查询中的 $[0-9] 字符串并且只提供匹配的总数给 pg_query_params 函数。

例如:

function my_query_params( $conn, $query, $params )
{
$matches = array();
preg_match( '/[^\'"]\$[0-9]+[^\'"]/', $query, $matches );

$params = array_slice( $params, 0, count( $matches ) - 1 );

return pg_query_params( $conn, $query, $params );
}

我根本没有测试过这个,但想法就在那里。

关于php - `pg_query_params` 和参数太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26275344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com