0

这是我有点失败的策略

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

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

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

    $results = $pdoStatement->fetchAll(); 
    

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

准备看起来像这样仅供参考

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

2 回答 2

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

于 2012-05-31T21:49:47.150 回答
1

所有这些情况下,你可以做

$arrayOfAssocArrays = $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
于 2012-05-31T21:58:57.193 回答