Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLite PDO绑定不工作?_Php_Sqlite_Pdo - Fatal编程技术网

Php SQLite PDO绑定不工作?

Php SQLite PDO绑定不工作?,php,sqlite,pdo,Php,Sqlite,Pdo,我觉得这件事让我发疯了。我有三张简单的桌子。用户表、角色表和角色用户表,以多对多关系连接用户和角色 我有以下代码来定义用户的角色: $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($q

我觉得这件事让我发疯了。我有三张简单的桌子。用户表、角色表和角色用户表,以多对多关系连接用户和角色

我有以下代码来定义用户的角色:

$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是否有什么地方弄乱了绑定?为什么绑定的示例不起作用?

这是PDO中的一个错误:

作为一种变通方法,以下代码虽然较重,但应适用于PHP5.3:

$query = $pdo->prepare(
    'select roles.* from roles inner join role_user on roles.id = role_user.role_id '
    . 'where role_user.user_id = :id'
);
$query->bindValue(':id', 1, PDO::PARAM_INT);
$query->execute();
die(var_dump($query->fetchAll()));

SQLite的最新版本有本机准备的语句,但我认为PDO还不能使用它们(IIRC,PDO的代码没有真正的维护程序,所以它没有太多的发展)。它可能不会改变任何东西,但您仍然可以尝试使用
$pdo->setAttribute(pdo::ATTR_EMULATE_,0)禁用仿真

如果你说
数组(1)
?字符串和数字之间的区别对于SQLite来说并不重要,但是…@mu-试过了。没有结果。这真让我大吃一惊!我以前做过大量的PDO工作,我从来没有见过这样的事情。如果你用占位符来填充,而不是提供给
execute
,会发生什么呢?伙计,如果这有什么不同,我会吃帽子的<代码>执行(数组(…)
应该与调用
bindParam
/
bindValue
完全相同。嗯,有吗?可能还有另一个错误被隐藏了。@TaylorOtwell然后将您的评论发布为答案并接受它以帮助未来的查看者。这个答案是否可以被设置为泛型,以便适用于任何类型的绑定值?