将查询传递给包含有界值的对象

时间:2011-08-11 14:52:08

标签: php object pdo

我正在使用PDO连接我的MySQL数据库

所以在我的用户列表之前我做过:

  • 按条件构建查询(在线?新用户?性别?)
  • 准备了查询
  • 将值绑定到查询
  • 执行
  • 获取一段时间()以显示结果

现在我只是调用一个对象UserCollection,加载它并预先输出。

$list = new UserCollection( $connect );
$list->load();
像那样。在load()中是现在的标准查询:

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

Theres没有任何有限的变量,所以它没有准备好。

工作正常,它只抓住所有用户。

现在我想要做的是传递已经构建到UserCollection()的查询并将其用于在查询中加载()。

如果查询没有限制变量,我可以很容易地做到这一点,比如上面的查询。

如果我想传递这样的变量,我该怎么办:

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

然后我需要绑定:性,我不能把bindValue()写成

  1. 该值不在UserCollection对象中
  2. 有时它可能只是WHERE firstname =:firstname而不是:sex,所以它会抛出我绑定了一个我不使用的值的错误..
  3. 那我该怎么办?我该怎么办?

    先谢谢

1 个答案:

答案 0 :(得分:-1)

您可以修改加载方法:

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,所以无法测试,但我认为这应该有用。