使用PDO的策略? (将结果推入数组)

时间:2012-05-31 21:47:25

标签: php pdo

这是我有点破碎的策略

  • 如果是没有输入的查询(总是相同),只需使用query();

    $results = $this->database_top->query( $query );
    
  • 如果返回单行且有输入,请执行准备(此处未显示)并使用

    $results = $pdoStatement->fetch(PDO::FETCH_ASSOC); 
    
  • 如果返回多行且有输入,请执行准备(此处未显示)并使用:

    $results = $pdoStatement->fetchAll(); 
    

我面临的问题是我需要第一种方法来返回数组或数组数组,如第二种和第三种。

Prep看起来像这个FYI

$this->database_top->quote($query);  // quote it
$pdoStatement = $this->database_top->prepare($query);  // prepare it
$results = $pdoStatement->execute($parameterArray); // execute it

如何修改代码以便所有3个方法都返回数组或数组数组?

迭代查询()

$result_array = $this->DatabaseObject->_pdoQuery( 'multiple', 'tweet_model' );
foreach( $result_array as $array_1d )
{
    $array_2d[]=$array_1d; 
}

2 个答案:

答案 0 :(得分:3)

query没有返回结果,所以我不确定你在第一个例子中的含义。 query返回PDOStatement。它基本上与:

相同
$qry = $db->query("...");
//equiv:
$qry = $db->prepare("...");
$qry->execute();

正如vicTROLLA所指出的,最简单的解决方案就是使用:

$results = $stmt->fetch(PDO::FETCH_ASSOC);

但是,如果由于某种原因需要处理结果,可以随时手动循环。

$stmt = ...;
$results = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $results[] = $row;
}
//use or return $results
因此,

$results将始终是一个内部包含0个或更多数组的数组。

我发现构建数组是有用的,其中数组键是记录的主键:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    $results[$row['id']] = $row;
}

另外,我怀疑你误解了quote的目的和功能。它用于转义要插入到查询中的字符串,而不是用于神奇地转义查询中的所有值(因此$db->quote($query)毫无意义)。

更糟糕的是,司机不需要支持报价。 (如果没有支持,它至少会返回false。)

prepare 首选优先于quote

答案 1 :(得分:1)

所有的情况下,您可以

$arrayOfAssocArrays = $pdoStatement->fetchAll(PDO::FETCH_ASSOC);