1

私は現在、次のような MySQL スクリプトを実行してwhile loopいます。

$Query = mysql_query("SELECT * FROM appointments");
    while ($Rows = mysql_fetch_array($Query))
    {
        ...
    }

これは単一の行を配列として返し、これを必要に応じて操作できます。次に例を示します。

if ($Rows['Reoccour'] == 1)
        {
            $NextDate = date('o-m-d', strtotime($Rows['Date'] . " +" . $Rows['howfar'] . " weeks"));
            if ($NextDate < date('o-m-d'))
            {
                mysql_query("UPDATE appointments SET Date='$NextDate' WHERE ID='{$Rows['ID']}'");
            }
        }

これは while ループ内に配置されるため、配列自体を操作できます。しかし、PDO に移行したいのですが、必要なarray形式を取得するのに問題があります。

これが私のコードです:

$Query = $dbh->prepare("SELECT * FROM appointments");
    $Query->execute();
    $Results = $Query->fetchAll();
    print_r($Results);

これにより、次のような多次元配列が生成されます。

Array ( 
    [0] => Array ( 
    [ID] => 1 
    [0] => 1 
    [Appointment] => JCP Lucy
    [1] => JCP Lucy 
    [Date] => 2012-12-21
    [2] => 2012-12-21
    [Location] => Grays JCP
    [3] => Grays JCP 
    [Reoccour] => 1 
    [4] => 1 
    [howfar] => 1 
    [5] => 1
    )

    [1] => Array ( 
    [ID] => 3
    [0] => 3 
    [Appointment] => JCP Sign On
    [1] => JCP Sign On 
    [Date] => 2012-12-14 
    [2] => 2012-12-14 
    [Location] => 
    JCP Grays 
    [3] => JCP Grays 
    [Reoccour] => 1 
    [4] => 1 
    [howfar] => 2 
    [5] => 2 ) 

 ) 

私がやろうとしているのは、MySQL 関数を使用するときに使用した$Results = $Query->fetchAll();ようなセットアップ内にあることです。while loop

単一の文字列まで配列を取得したい場合は、次のようにする必要があります。

foreach ($Results AS $results)
{
    foreach ($results AS $result)
    {
        echo "{$result} <br>"; 
    }
}

しかし、これは戻ります:

1
JCP Lucy
JCP Lucy
2012-12-21
2012-12-21
Grays JCP
Grays JCP
1
1
1
1
3
3
JCP Sign On
JCP Sign On
2012-12-14
2012-12-14
JCP Grays
JCP Grays
1
1
2
2 

値が重複しています。私の質問は:

1) 重複する値を削除します

2) while loopPDO Api を使用してしばらく実行します -- ただし、関数を実行したときと同じように配列キーを操作できるようにしmysql_fetch_arrayます。

4

1 に答える 1

0

PDO::FETCH_ASSOCに渡すオプションを探していると思いますfetchAll()

$Query->fetchall(PDO::FETCH_ASSOC);

PDO::FETCH_ASSOCあなたにあげる

results = array(
  [0] => array(
    'column' => 'value',
    'column' => 'value',
    ...
  ),
  [1] => array(
     ...
  },
  ...
);

その後、反復できます。

于 2012-12-21T15:54:12.683 に答える