gpt4 book ai didi

PHP PDO (PostgreSQL) : can't get multiple parameters to work

转载 作者:搜寻专家 更新时间:2023-10-31 21:12:39 25 4
gpt4 key购买 nike

我有以下内容,但我无法让它工作:

$pdo = new \PDO('pgsql:host=xxxx;port=xxx;dbname=xxx;user=xxx;password=xxx');

$foo = 123;
$bar = 123;

$query = '
SELECT *,
(
SELECT allow
FROM foo
WHERE foo_field = ?
AND lorem.lorem_id = foo.lorem_id
) as foo_allowed, (
SELECT allow
FROM bar
WHERE bar_id = ?
AND lorem.lorem_id = bar.lorem_id
) as bar_allowed
FROM lorem';

$stmt = $pdo->prepare($query);
$stmt->bindValue(1, $foo);
$stmt->bindValue(2, $bar);
$stmt->execute();

var_dump($stmt->fetchAll());

上面的代码给我以下错误:

Message: An exception occurred while executing '(query)': SQLSTATE[08P01]: <>: 7 ERROR: bind message supplies 2 parameters, but prepared statement "" requires 1

我在 mysql 中尝试了同样的方法,它运行良好。我也尝试了命名参数,但这也不起作用。

使用 PHP 5.4.6 版和 PostgreSQL 9.1.7。

@科夫格我有用户、角色和资源。用户可以拥有资源,角色也可以拥有资源。一个用户有一个角色。在表 user_resource 中有一个字段表明是否允许用户访问该资源。角色也一样。我想要一个包含所有资源的表(HTML 表),并查看是否允许用户访问资源(首先通过 user_resource,然后通过 role_resource)

最佳答案

您可以改用表连接吗?所以你的查询变成了这样的:

SELECT l.*,
f.allow,
b.allow
FROM foo_allowed f INNER JOIN
lorem l ON ( l.lorem_id = f.lorem_id ) INNER JOIN
bar_allowed b ON ( l.lorem_id = b.lorem_id )
WHERE f.foo_field = ?
AND b.bar_field = ?

我还没有测试过,所以语法可能是错误的。

关于PHP PDO (PostgreSQL) : can't get multiple parameters to work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879399/

25 4 0