Привязки SQLite PDO не работают? - PullRequest
2 голосов
/ 18 мая 2011

Я чувствую, что схожу с ума по этому вопросу.У меня есть три простых стола.Таблица пользователей, таблица ролей и таблица 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, что портит привязки?Почему не работает пример с привязками?

1 Ответ

2 голосов
/ 19 мая 2011

Это ошибка в PDO: http://bugs.php.net/bug.php?id=45259

В качестве обходного пути следующий код, хотя и более тяжелый, должен работать в 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_PREPARES, 0);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...