Where clause builder
- Home
- Database access
- Where clause builder
Pdb::buildClause
Builds a clause string by combining conditions, e.g. for a WHERE or ON clause.
The resultant clause will contain ? markers for safe use in a prepared SQL statement.
The statement and the generated $values can then be run via Pdb::query.
Each condition (see $conditions) is one of:
- The scalar value 1 or 0 (to match either all or no records)
- A column => value pair
- An array with three elements: [column, operator, value(s)].
Conditions are usually combined using AND, but can also be OR or XOR; see the $combine parameter.
$conditions = []; $conditions[] = ['active' => 1]; $conditions[] = ['date_added', 'BETWEEN', ['2015-01-01', '2016-01-01']]; $params = []; $where = Pdb::buildClause($conditions, $params); // Variable contents: // $where == "active = ? AND date_added BETWEEN ? AND ?" // $params == [1, '2015-01-01', '2016-01-01']; $q = "SELECT * FROM ~my_table WHERE {$where}"; $res = Pdb::query($q, $params, 'pdo'); foreach ($res as $row) { // Record processing here } $res->closeCursor();
Condition examples
['id', '=', 3]
['date_added', 'BETWEEN', ['2010', '2015']]
['status', 'IN', ['ACTIVE', 'APPROVE']]
Simple operators:
=
, <=
, >=
, <
, >
, !=
, <>
Operators for LIKE conditions; escaping of characters like % is handled automatically:
CONTAINS string
BEGINS string
ENDS string
Other operators:
IS string 'NULL' or 'NOT NULL'
BETWEEN array of 2 values
(NOT) IN array of values
IN SET string -- note the order matches other operators; ['column', 'IN SET', 'val1,ca']