在foreach循环中复制PHP会话

在foreach循环中复制PHP会话,php,session,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) {

我正在尝试根据返回的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);
}
当运行此代码时,会生成我的会话,但我得到如下结果

$_SESSION['Default_UA_landing_theme_id'] = 1
$_SESSION['Default_UA_landing_0'] = 1
它对创建的每个会话都执行此操作,它创建一个会话,其中$k是我的查询返回的结果的字段名,然后创建另一个会话,其中$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;
    }

如果不知道更多关于
获取行协会的情况,我不能确定,但看起来在应该是关联数组的数组中有数字和非数字索引。您可能应该查看
self::$db
后面的任何类,看看是否有其他方法可以解决这个问题

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

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

如果不知道更多关于
获取行协会的情况,我不能确定,但看起来在应该是关联数组的数组中有数字和非数字索引。您可能应该查看
self::$db
后面的任何类,看看是否有其他方法可以解决这个问题

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

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

您正在使用
FETCH\u BOTH
(创建一个包含数字和关联索引的数组),然后在
foreach
中循环。为什么在指定
FETCH\u ASSOC
后立即使用
FETCH\u BOTH

您正在使用
FETCH\u BOTH
(创建一个包含数字和关联索引的数组),然后在
foreach
中循环。在指定
FETCH\u ASSOC
后,为什么要立即使用
FETCH\u BOTH

的行为似乎是,每列取2次,包括列顺序和列名@s2xi调查内部
self::$db
并查看是否可以更改(或将
$fetch\u style=PDO::fetch\u ASSOC
作为参数传递)。(编辑:将mysql更改为PDO)似乎的行为是,使用列顺序和列名将每列提取2次。@s2xi在
self::$db
内部进行调查,看看是否可以更改(或将
$fetch\u style=PDO::fetch\u ASSOC
作为参数传递)。(编辑:将mysql更改为PDO)嗯,我在研究PDO如何处理查询时使用了该方法。你建议我将其修改为什么?没关系,我只是将两者都设置为ASSOC,我得到了我一直在寻找的结果。我在研究PDO如何处理查询时使用了该方法。你建议我将其修改为什么?没关系,我只是将两者都设置为ASSOC,我得到了我正在查看的结果寻找