簡體   English   中英

PDO動態查詢構建

[英]PDO Dynamic Query Building

我使用mysql_query進入舊學校,現在開始使用PDO。 哪個好極了!

但是在我的舊腳本中,我構建了一個動態查詢構建器,並且我很難將其移植到使用PDO上。

如果有人能給我一些很棒的方向!

這是它的理論。

  1. 我有一個數組
  2. 數據庫字段和值(插入時)。
  3. 創建查詢字符串以生成有效的PDO事務

這是我正在嘗試做的一部分。

public $dbFields; // This is an array of the fields plus VALUES

public function select($where, $limit) {
    // This is what I **had** before
    $query = "SELECT ". implode(", ", $this->dbFields) ." FROM ". $this->table." WHERE ". $where ." ". $limit."";

    // Now i need to convert that to PDO
    $this->connection->beginTransaction();

    # START Query
    $select = $this->connection->prepare("SELECT {$this->fieldNames} FROM {$this->table}");

    // I need to BIND my params and values, but i'm not sure the best route to take when I have a WHERE clause that includes, "AND" / "OR" operators.

    # EXECUTE the query
    $select->execute();

    $this->connection->commit();
}

這是以前

$results = $db->select("userId = 111 OR userId = 222");

但我認為我需要做的是使用更像的東西

$results = $db->select(array("userId"=>111, "userId"=>222));

我知道這是一個很高的命令,我希望它在我想要做的事情上有意義,但是在嘗試構建這些查詢時的任何幫助都將非常感激。

你的select方法需要一個單獨的$params參數。 我冒昧地為方法參數提供默認值。 與@userXxxx注釋一樣,您只需執行SELECT即可進行事務處理。

<?php

class db {

    public $connection; //PDO
    public $dbFields; // This is an array of the fields plus VALUES

    public function select($where = '1', $params = array(), $limit = '', $fetchStyle = PDO::FETCH_ASSOC) { //fetchArgs, etc
        $fields = implode(', ', $this->dbFields);

        //create query
        $query = "SELECT $fields FROM {$this->table} WHERE $where $limit";

        //prepare statement
        $stmt = $this->connection->query($query);

        $stmt->execute($params);

        return $stmt->fetchAll($fetchStyle);
    }

    //...
}


$where = 'userId IN(:userId1, :userId2)';
$params = array(':userId1' => 111, ':userId2' => 2222);
$db->select($where, $params);

筆記:

  • 如果您真的想要,可以添加其他方法參數以匹配PDOStatement :: fetchAll的所有靈活性。
  • 我不確定你對$dbFields是什么意思是“字段加VALUES”。 你可以解釋嗎?

[編輯]

您可能需要查看PDOStatement :: execute的docs / examples,因為這似乎是您的混亂根源所在 - 特別是$input_parameters方法參數。

那這個呢?

public function select($where, $limit) {
    $query = "SELECT ". implode(", ", $this->dbFields) ." FROM ". $this->table." WHERE ". $where ." ". $limit."";
    $this->connection->query($query);
}

//Use what you had before:
$results = $db->select("userId = 111 OR userId = 222");

不確定為什么要使用事務(用於全有或全無或捕獲異常和回滾)或准備好的查詢(用於發送多個查詢)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM