[英]PDO Dynamic Query Building
我使用mysql_query進入舊學校,現在開始使用PDO。 哪個好極了!
但是在我的舊腳本中,我構建了一個動態查詢構建器,並且我很難將其移植到使用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);
筆記:
$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.