2011-06-27 57 views
0

我试图做出断基于SQL查询的数据会话被返回PHP会议foreach循环

这个被复制是我的代码:

$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是由我的查询返回,那么结果的字段名这让另一w^1个会话ith $ k是$ r数组的索引。

我怎么能让它每$ k一个会话?

这是我用它来查询我的datase

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; 
    } 

回答

1

您正在使用FETCH_BOTH(创建与两个数字关联索引的阵列),然后通过一个循环foreach。为什么在指定FETCH_ASSOC后立即使用FETCH_BOTH

+0

好吧,我在研究PDO如何处理查询时确实做了这个方法,你会建议我怎么解决它? – Eli

+0

它的好,我只是设置为ASSOC和我得到了我的结果我一直在寻找 – Eli

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); 
} 
+0

看起来是['PDOStatemente :: fetch()'](http://es2.php.net/manual/en/pdostatement.fetch.php)的行为,它将每列取2次,列顺序和列名称。 @ s2xi调查'self :: $ db'内部,看看你是否可以改变它(或者传递'$ fetch_style = PDO :: FETCH_ASSOC'作为参数。(编辑:改变mysql到pdo) –

+0

我使用$ db方法 – Eli