在foreach循环中复制PHP会话

时间:2011-06-27 11:25:14

标签: php session

我正在尝试根据sql查询数据进行基于正在返回的会话

这是我的代码:

$r = self::$db->fetch_row_assoc($sql);
$theme_dir = THEME_PATH . self::get_useragent() . "_UA_" . $flag . "_" . $r['theme_folder_name'];

if (self::$config['set_session'] == 1) {
    foreach ($r as $k => $v) {
        self::$session->set(self::get_useragent() . "_UA_" . $flag . "_" . $k, $v);
    }

    self::$session->set(self::get_useragent() . "_UA_" . $flag . "_theme_loaded",      1);
}

当这段代码运行时,make会话,但我得到像

这样的东西
$_SESSION['Default_UA_landing_theme_id'] = 1
$_SESSION['Default_UA_landing_0'] = 1

它为它创建的每个会话执行此操作,它使用$ k作为我的查询返回的结果的字段名称的1个会话然后使用$ k作为$ r数组的索引。

我怎样才能让每个$ k进行一次会话?

这是我用来查询数据的方法

public function fetch_row_assoc($statement)
    {
        self::$PDO->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        try{
            $stmt = self::$PDO->query($statement); 
            $stmt->setFetchMode(PDO::FETCH_ASSOC);
            $result = $stmt->fetch(PDO::FETCH_BOTH); //FETCH_BOTH
            return $result;
        }catch(PDOException $e){
            echo $e->getMessage();
        }
        return false;
    }

2 个答案:

答案 0 :(得分:2)

在不了解更多关于fetch_row_assoc的内容的情况下,我无法确定,但看起来你应该在关联数组中有数字和非数字索引。您应该查看self::$db背后的任何类,看看是否有其他方法可以解决这个问题。

如果您正在使用的库不会为您提供没有数字索引的关联数组,那么您可以使用is_numeric的测试来解决上述问题。

foreach ($r as $k => $v) {
    if( is_numeric( $k ) )
             self::$session->set(
                       self::get_useragent() . "_UA_" . $flag . "_" . $k, 
                       $v);
}

答案 1 :(得分:1)

您正在使用FETCH_BOTH(创建包含数字关联索引的数组),然后在foreach中循环。为什么在指定FETCH_BOTH后立即使用FETCH_ASSOC

相关问题