sql >> データベース >  >> RDS >> Mysql

省略形のPDOクエリ

    したがって、「なぜこのエラーが発生するのか」という質問に対する回答はありますが、「短縮PDOクエリ」に対する回答は得られませんでした。

    このためには、「プログラミング」と呼ばれるものが少し必要になります。

    プログラミングの興味深い点の1つは、他の職業のように、既存のツールに限定されないことです。プログラミングを使用すると、いつでも独自のツールを作成して、古いツールのセット全体の代わりにそれを使い始めることができます。

    また、オブジェクト指向プログラミングは、既存のオブジェクトを取得して一部の機能を追加するだけで、残りはそのままにしておくことができるため、特に優れています。

    たとえば、PDOで準備されたクエリを実行する簡単な方法が必要だとします。必要なのは拡張することだけです 新しい短縮メソッドを使用したPDOオブジェクト。最も難しいのは、新しいメソッドに名前を付けることです。

    残りは簡単です。必要なコードは数行だけです

    class MyPDO extends PDO
    {
        public function run($sql, $bind = NULL)
        {
            $stmt = $this->prepare($sql);
            $stmt->execute($bind);
            return $stmt;
        }
    }
    

    これはすべてのコードです あなたが必要です。データベースのクレデンシャルを保存するのと同じファイルに保存できます。この追加は既存のコードには影響しませんことに注意してください いずれにせよ、それはまったく同じままであり、既存のすべてのPDO機能を通常どおり使用し続けることができます。

    これで、PDOコンストラクターで2文字だけ変更する必要があり、それを

    と呼びます。
    $conn = new MyPDO(...the rest is exactly the same...);
    

    そしてすぐに、光沢のある新しいツールを使い始めることができます:

    $sql = "SELECT * FROM myTable WHERE id = :id";
    $result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);
    

    または、少し最適化して

    $result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();
    

    いつでもデフォルトのフェッチモードを一度だけ設定でき、1つの変数だけでは、指定されたプレースホルダーは使用されません。これにより、このコードは実際の省略形になります。 受け入れられた答えと比較して、

    $stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
    $stmt_test->execute([$id]);
    $result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);
    

    そして、あなたがこれまでに得た最良の答えにさえ、

    $result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
    $result->execute([$id]);
    

    言うまでもなく、後者は配列の取得にのみ適しているため、常に使用できるとは限りません。 本物 任意の結果形式の省略形が可能です:

    $result = $conn->run($sql, [$id])->fetchAll(); // array
    $result = $conn->run($sql, [$id])->fetch(); // single row
    $result = $conn->run($sql, [$id])->fetchColumn(); // single value
    $result = $conn->run($sql, [$id])->fetchAll(PDO::FETCH_*); // dozens of different formats
    


    1. SUBTIME()の例– MySQL

    2. SQL、テーブルへのデータの追加

    3. MYSQL ORvsINパフォーマンス

    4. MySQLVARCHARの長さとUTF-8