【发布时间】:2011-08-27 18:05:36
【问题描述】:
我觉得我在这件事上失去了理智。我有三个简单的表。用户表、角色表和以多对多关系连接用户和角色的 role_user 表。
我对用户的角色有以下代码:
$query = $pdo->prepare('select roles.* from roles inner join role_user on roles.id = role_user.role_id where role_user.user_id = ?');
$query->execute(array('1'));
die(var_dump($query->fetchAll()));
这将返回一个空数组。没有结果。但是,如果我将代码更改为此,我将获得用户的角色:
$query = $pdo->prepare('select roles.* from roles inner join role_user on roles.id = role_user.role_id where role_user.user_id = 1');
$query->execute();
die(var_dump($query->fetchAll()));
我是否遗漏了一些非常明显的东西?我的 SQL 有什么东西弄乱了绑定吗?为什么绑定的示例不起作用?
【问题讨论】:
-
如果你说
array(1)怎么办?字符串和数字之间的区别对于 SQLite 来说应该无关紧要,但是...... -
@mu - 试过了。没有结果。这真的让我大吃一惊!我以前做过大量的 PDO 工作,但从未见过这样的事情。
-
如果您使用
bindParam填充占位符而不是提供给execute,会发生什么情况? -
伙计,如果这有什么不同,我要吃一顶帽子。
execute(array(...))应该与调用bindParam/bindValue完全相同。嗯。你有switched PDO to exception-throwing mode吗?也许那里还有另一个错误被隐藏了。 -
@TaylorOtwell 然后发布您的评论作为答案并接受它以帮助未来的观众