1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
<?php
namespace FluentMail\App\Services\DB\QueryBuilder;
class QueryObject { /** * @var string */ protected $sql;
/** * @var \wpdb */ protected $db;
/** * @var array */ protected $bindings = array();
public function __construct($sql, array $bindings) { $this->sql = (string) $sql;
$this->bindings = $bindings;
global $wpdb;
$this->db = $wpdb; }
/** * @return string */ public function getSql() { return $this->sql; }
/** * @return array */ public function getBindings() { return $this->bindings; }
/** * Get the raw/bound sql * * @return string */ public function getRawSql() { return $this->interpolateQuery($this->sql, $this->bindings); }
/** * Replaces any parameter placeholders in a query with the value of that * parameter. Useful for debugging. Assumes anonymous parameters from * $params are are in the same order as specified in $query * * Reference: http://stackoverflow.com/a/1376838/656489 * * @param string $query The sql query with parameter placeholders * @param array $params The array of substitution parameters * * @return string The interpolated query */ protected function interpolateQuery($query, $params) { $keys = $placeHolders = [];
foreach ($params as $key => $value) { if (is_string($key)) { $keys[] = '/:' . $key . '/'; } else { $keys[] = '/[?]/'; }
$placeHolders[] = $this->getPlaceHolder($value); }
$query = preg_replace($keys, $placeHolders, $query, 1, $count);
return $params ? $this->db->prepare($query, $params) : $query; }
private function getPlaceHolder($value) { $placeHolder = '%s';
if (is_int($value)) { $placeHolder = '%d'; } elseif (is_float($value)) { $placeHolder = '%f'; }
return $placeHolder; } }
|