【发布时间】:2013-03-30 13:15:43
【问题描述】:
我有以下问题,但我无法让它工作:
$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());
上面的代码给了我以下错误:
消息:执行“(查询)”时发生异常:SQLSTATE[08P01]::7 错误:绑定消息提供 2 个参数,但是 准备好的语句 "" 需要 1
我在 mysql 中尝试过同样的方法,效果很好。我也尝试了命名参数,但这也不起作用。
使用 PHP 5.4.6 和 PostgreSQL 9.1.7。
@Kovge 我有用户、角色和资源。用户可以拥有资源,角色可以拥有资源。一个用户只有一个角色。在表 user_resource 中有一个字段表示是否允许用户访问资源。角色也是一样。 我想要一个包含所有资源的表(HTML 表),并查看是否允许用户访问资源(首先通过 user_resource,然后是 role_resource)
【问题讨论】:
-
您可能需要加入吗?或者
foo_allowed和bar_allowed将在行中具有相同的值。 -
@Jari 也许加入确实是个好主意,但对于 foo_allowed 和 bar_allowed,我将这些值从不同的表中获取,那么它们如何在行上成为相同的值?
-
另外,我在 mysql 中尝试了相同的查询,它工作得很好..
-
你想看到什么结果?您能否在您的问题中添加您对查询的期望的示例输出?
-
@Kovge 和 Jari 感谢您提出的建议。我尝试了一个更简单的查询并且成功了..我想我会去加入查询
标签: php postgresql pdo prepared-statement