2011-09-25 115 views
0

我试图从PDO ResultSet中得到列数为单独的阵列,所以导致这样:从结果集选择列到数组

<?php 
    $query = 'SELECT col1,col2 FROM tbl_imaginary'; 
    ... 
    $col1 = array(col1_row1, col1_row2,...); 
    $col2 = array(col2_row1, col2_row2,...); 
?> 

我知道我可以遍历与获取结果集,但使用fetchAll(PDO:FETCH_COLUMN)似乎更有效率。但是,一旦你这样做了,除非你再次在语句句柄上执行execute(),否则你不能再次执行它。我得到了原因,你不能清空饼干罐,然后再次做同样的事情,除非你再次填充 - 有点儿。所以,我想我会复制该语句处理对象并获取它的列这样的:

<?php 
    $sh->execute(); 
    for ($i=0; $i<$sh->columnCount(); $i++) 
    { 
    $tmp_sh = $sh; 
    $output[$i] = $tmp_sh->fetchAll(PDO::FETCH_COLUMN); 
    } 
?> 

然而,这,就像在原来的语句做使用fetchall()处理本身,只输出第一列,而不是第二。

如果有人愿意向我解释这种行为和/或提出解决方案,我将非常感激。

非常感谢您的时间。

编辑:所以基本上我想从一个结果集中得到2(或更多)列作为单独的数组,就像你会在单个列上执行2个(或更多)个别查询一样。以上大部分是我迄今为止试图做到这一点的解释。

+0

为什么你想在两个单独的数组列? – Eric

+0

选择单独的列有什么意义? –

+0

我有几个用途,其中之一是例如使用in_array($ col1)来检查表单复选框传递的值是否为有效值(复选框值偏离了同一列的加载)。现在,我可以使用2个查询来做到这一点,但是如果为了这个目的需要这两列(来自同一个表),那么如果可以用1来完成2个查询,似乎开销很大。 – NwN

回答

1

为什么你需要两个独立的数组?

$statement = $db->prepare('SELECT col1, col2 FROM tbl_imaginary'); 
$statement->execute(); 

foreach($sth->fetchAll() as $row) { 
    echo $row['col1'], $row['col2']; 
} 
+0

感谢您的回复。请看我上面的评论。 – NwN