我有以下内容,我无法让它工作:
$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)
答案 0 :(得分:1)
你可以使用表连接吗?所以你的查询就像:
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 = ?
我没有对此进行测试,因此语法可能有误。
答案 1 :(得分:1)
您是否尝试过直接调用execute而不使用bind。
$stmt = $pdo->prepare($query);
$stmt->execute(array( 1 => $foo, 2 => $bar));