0

これが私のやや壊れた戦略です

  • 入力のないクエリ (常に同じ) の場合は、query(); を使用してください。

    $results = $this->database_top->query( $query );
    
  • 単一の行が返され、入力がある場合は、準備を行い (ここには示されていません)、使用します

    $results = $pdoStatement->fetch(PDO::FETCH_ASSOC); 
    
  • 複数の行が返され、入力がある場合は、準備を行い (ここには示されていません)、次を使用します。

    $results = $pdoStatement->fetchAll(); 
    

私が直面している問題は、2 番目と 3 番目のような配列または配列の配列を返す最初のメソッドが必要だということです。

準備はこのように見えます 参考までに

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

3 つのメソッドすべてが配列または配列の配列を返すようにコードを変更するにはどうすればよいですか?

query() の繰り返し

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

2 に答える 2

3

query結果を返さないため、最初の例で何を意味しているのかわかりません。 queryPDOStatement を返します。基本的には次と同じです。

$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 に答える