Сеанс PHP дублируется в цикле foreach - PullRequest
0 голосов
/ 27 июня 2011

Я пытаюсь сделать сеансы, основанные на 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

он делает это для каждого сеанса, который он создает, он делает 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;
    }

Ответы [ 2 ]

2 голосов
/ 27 июня 2011

Не зная больше о том, что происходит с 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 голос
/ 27 июня 2011

Вы используете FETCH_BOTH (создает массив с числовыми индексами и ), а затем циклически перебираете foreach. Почему вы используете FETCH_BOTH сразу после указания FETCH_ASSOC?

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