2

情報

私のコーディング習慣の傾向に気付き始めており、より良い方法はないかと考えています。

問題

例として、データが含まれている可能性のあるテーブルがあるとしましょう。理想的には、データがある場合はデータをループし、エラー メッセージを表示しない場合はループします。

現在のソリューション

function countResults($type){

    $STH = $this->database->prepare('SELECT COUNT(*) FROM table WHERE type = :type');
    $STH->execute(array(':type' => $type));
    return $STH->fetchColumn();

}

if($class->countResults("1") != 0){

    $STH = $this->database->prepare('SELECT * FROM table WHERE type = :type ');
    $STH->execute(array(':type' => $type));

    while($row = $STH->fetch(PDO::FETCH_ASSOC)){

        echo "Row Name:".$row['name']."<br />";

    }

}    else    {

     echo "None found";

}

試行回数

$STH->fetch(PDO::FETCH_ASSOC)変数に格納してから使用することでこれを削減する解決策を試しましたif(!empty($var)){// loop code};が、データを正しくループアウトすることはできません。

結論

これが緊急に修正するのに苦労している画期的なバグではないことは理解していますが、これが悪い習慣になりつつあるように感じており、これに対するよりスマートな解決策があるのではないかと少し心配しています。習慣になる前に学びましょう!

必要に応じて質問してください。ありがとうございます。

4

3 に答える 3

1

あなたのアプローチは間違っているというよりはむしろ非論理的です。必要なのは常識だけです。
シックスパックを購入することを想像してみてください。ポケットから現金を引き出すのは 2 回ですか、それとも 1 回ですか? あなたは本当にこのようにしていますか:

  1. お金を感じるためだけに、ポケットに手を伸ばします。幾つかある。わかった。
  2. 手を戻して、もう一度手を伸ばしてください - 今度はお金のために。

一度だけ到達して、十分にビールを購入するか、そうでない場合はごめんなさいと言ってみませんか?

$STH = $this->database->prepare('SELECT * FROM table WHERE type = :type ');
$STH->execute(array(':type' => $type));
$data = $STH->fetchAll();

if ($data)
{
    foreach($data as $row)
    {
        echo "Row Name:".$row['name']."<br />";
    }

} else {

     echo "None found";
}
于 2013-10-21T13:26:06.123 に答える
0

私はこのようにします。誰かが何か間違っていると思ったら、指摘してください:

  • フィールド名にアクセスできるので foreach を好む
  • rowCount() は更新された行に対して 2 を返すことができるため、rowCount() の代わりに count() を使用することに慣れるのが好きです。
  • デバッグするために false が返されるかどうかを確認するのが好きです。通常、これにはワンライナーを使用するため、本番環境で簡単にコメントアウトまたは削除できます

function myQuery(){
    $STH = $this->database->prepare('SELECT * FROM table WHERE type = :type ');
    $STH->execute(array(':type' => $type));
    $data = $STH->fetchAll(PDO::FETCH_ASSOC);

    if($data === false) return "SQL query Error"; // or a method/function that returns the actual error code/message";
    if($data){
        foreach($data as $k => $v) echo "$k: $v<br>"; // I actually prefer to return the array $data and handle the info elsewhere
    } else {
        "None Found";
    }
}
于 2013-10-21T13:49:37.593 に答える