duane9322 2010-06-27 00:29
浏览 86

在PHP的PDO Select上更改返回格式

I am writing my own PDO wrapper to make my life easier and a fair amount safer.

A standard query looks like:

$user = $db->select('users')
           ->eq('twitter_id', $twitter_id)
           ->limit(1)
           ->prepare()
        ->exec();

Generates this query:

SELECT * FROM users WHERE twitter_id = :twitter_id LIMIT 1

This works perfectly fine as I, currently, want it. Where I am running into a problem is when I have a query to return multiple rows.

My apps stores some dynamic settings that I want to grab and use in one pass and I can do that by running a query like:

$share_datas = $db->select('settings', 'setting, value')
                  ->prepare()
               ->exec();

Which generates:

SELECT setting, value FROM settings

Which returns:

Array
(
    [0] => Array
        (
            [setting] => since_id
            [value] => 17124357332
        )

    [1] => Array
        (
            [setting] => last_dm
            [value] => 1271237111
        )
)

The function prepare() puts the pieces together for the query and the function exec() binds the params and returns the array.

    function exec()
    {
//      echo 'vars: <pre>'.print_r($this->sql_vars, true).'</pre>';
        $stmt = $this->dbh->prepare($this->sql_last_query); 
        foreach($this->sql_vars as $key => $val)
        {
            if('date_time' === $key) continue;
            $bind = $stmt->bindValue($key, $val);
        }
        $stmt->execute();
        $this->sql_vars = array();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

Now to the question: Is there a way that I can change exec() or the query itself so that it can return an array that returns like below and avoids any additional loops?

Array
(
     [since_id] => 17124357332
     [last_dm]  => 1271237111
)
  • 写回答

2条回答 默认 最新

  • douxianxing5712 2010-06-27 00:47
    关注

    No problem with some simple array functions.

    $in = $db->exec();
    $out = array();
    foreach( $in as $row )
        $out[ $row['setting'] ] = $row['value'];
    

    If you need a more general function, you'll have to describe the transformation clearer.

    评论

报告相同问题?

悬赏问题

  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)