Передача запроса к объекту, который содержит ограниченные значения - PullRequest
0 голосов
/ 11 августа 2011

Я использую PDO для соединения с моей базой данных MySQL

Итак, прежде чем в моем списке пользователей я сделал:

  • Построить запрос по условиям (онлайн? Новый пользователь? Секс?)
  • подготовил запрос
  • привязал значения к запросу
  • execute
  • извлекает while () для отображения результатов

Теперь я просто вызываю объект UserCollection, загружаю его и передаю вывод.

$list = new UserCollection( $connect );
$list->load();

вот так.В load () стандартный запрос на данный момент:

    $stmt = $this->_pdo->query( 'SELECT id FROM users' );
    $data = $stmt->fetchAll( PDO::FETCH_ASSOC );

Нет никаких переменных к нему, поэтому он не подготовлен.

Работает нормально, и захватывает только всех пользователей.

Теперь я хочу передать запрос, который был собран, в UserCollection () и использовать его для загрузки () в запросе.

Я мог бы сделать это легко, если бы запрос не был ограничен переменными, как запрос выше.

Так что мне делать, если я хочу передать переменную, подобную этой:

SELECT firstname, lastname, id, sex, last_access, bostadsort FROM users WHERE sex=:sex

Тогда мне нужно будет связать: sex, и я не могу просто написать bindValue () как

  1. значение не находится внутри объекта UserCollection
  2. иногда это можетбыть только ГДЕ firstname =: firstname, а не: sex, поэтому будет выдано сообщение об ошибке, что я связал значение, которое я не использую ..

Так что мне здесь делать?что я могу сделать?

Спасибо вперед

1 Ответ

0 голосов
/ 11 августа 2011

Вы можете изменить свой метод загрузки:

function load($params = array()){
    $stmt = $this->_pdo->prepare("*your sql here*");
    if (!empty($params)){
        foreach ($params as $param_key=>$param_value)
             $stmt ->bindParam($param_key, $param_value);
    }
    $data = $stmt->fetchAll( PDO::FETCH_ASSOC );
}

таким образом, вам не нужно изменять существующий код. Чтобы использовать его с новыми запросами с произвольным числом параметров, просто назовите его следующим образом:

$sex = 'male';
$firstname = 'Richard';
$params = array(':sex'=>&$sex, ':firstname'=>&$firstname);
$list->load($parameters);

У меня нет PHP, поэтому не могу его протестировать, но я думаю, что это должно сработать.

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