Fix out-of-order where/set statements
This commit is contained in:
parent
b1624e2f95
commit
ee6f946782
@ -115,7 +115,14 @@ class Query_Builder {
|
|||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $values;
|
private $values = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Values to apply to where clauses in prepared statements
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $where_values = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Value for limit string
|
* Value for limit string
|
||||||
@ -504,7 +511,7 @@ class Query_Builder {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Add to the values array
|
// Add to the values array
|
||||||
$this->values[] = $val;
|
$this->where_values[] = $val;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -654,7 +661,7 @@ class Query_Builder {
|
|||||||
if (is_scalar($key) && is_scalar($val))
|
if (is_scalar($key) && is_scalar($val))
|
||||||
{
|
{
|
||||||
$where[$key] = $val;
|
$where[$key] = $val;
|
||||||
$this->values[] = $val;
|
$this->where_values[] = $val;
|
||||||
}
|
}
|
||||||
// Array or object, loop through and add to the where array
|
// Array or object, loop through and add to the where array
|
||||||
elseif ( ! is_scalar($key))
|
elseif ( ! is_scalar($key))
|
||||||
@ -662,7 +669,7 @@ class Query_Builder {
|
|||||||
foreach($key as $k => $v)
|
foreach($key as $k => $v)
|
||||||
{
|
{
|
||||||
$where[$k] = $v;
|
$where[$k] = $v;
|
||||||
$this->values[] = $v;
|
$this->where_values[] = $v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -724,7 +731,7 @@ class Query_Builder {
|
|||||||
|
|
||||||
foreach($val as $v)
|
foreach($val as $v)
|
||||||
{
|
{
|
||||||
$this->values[] = $v;
|
$this->where_values[] = $v;
|
||||||
}
|
}
|
||||||
|
|
||||||
$string = $key . " {$in} (".implode(',', $params).') ';
|
$string = $key . " {$in} (".implode(',', $params).') ';
|
||||||
@ -1092,12 +1099,12 @@ class Query_Builder {
|
|||||||
// Do prepared statements for anything involving a "where" clause
|
// Do prepared statements for anything involving a "where" clause
|
||||||
if ( ! empty($this->query_map) || ! empty($this->having_map))
|
if ( ! empty($this->query_map) || ! empty($this->having_map))
|
||||||
{
|
{
|
||||||
$result = $this->prepare_execute($sql, $this->values);
|
$result = $this->_run($sql);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Otherwise, a simple query will do.
|
// Otherwise, a simple query will do.
|
||||||
$result = $this->query($sql);
|
$result = $this->query($sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset for next query
|
// Reset for next query
|
||||||
@ -1163,7 +1170,7 @@ class Query_Builder {
|
|||||||
// Do prepared statements for anything involving a "where" clause
|
// Do prepared statements for anything involving a "where" clause
|
||||||
if ( ! empty($this->query_map))
|
if ( ! empty($this->query_map))
|
||||||
{
|
{
|
||||||
$result = $this->prepare_execute($sql, $this->values);
|
$result = $this->_run($sql);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1197,8 +1204,7 @@ class Query_Builder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sql = $this->_compile("insert", $table);
|
$sql = $this->_compile("insert", $table);
|
||||||
|
$res = $this->_run($sql);
|
||||||
$res = $this->prepare_execute($sql, $this->values);
|
|
||||||
|
|
||||||
$this->reset_query();
|
$this->reset_query();
|
||||||
|
|
||||||
@ -1223,8 +1229,7 @@ class Query_Builder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$sql = $this->_compile('update', $table);
|
$sql = $this->_compile('update', $table);
|
||||||
|
$res = $this->_run($sql);
|
||||||
$res = $this->prepare_execute($sql, $this->values);
|
|
||||||
|
|
||||||
$this->reset_query();
|
$this->reset_query();
|
||||||
|
|
||||||
@ -1251,8 +1256,7 @@ class Query_Builder {
|
|||||||
|
|
||||||
// Create the SQL and parameters
|
// Create the SQL and parameters
|
||||||
$sql = $this->_compile("delete", $table);
|
$sql = $this->_compile("delete", $table);
|
||||||
|
$res = $this->_run($sql);
|
||||||
$res = $this->prepare_execute($sql, $this->values);
|
|
||||||
|
|
||||||
$this->reset_query();
|
$this->reset_query();
|
||||||
|
|
||||||
@ -1334,7 +1338,7 @@ class Query_Builder {
|
|||||||
* @param bool
|
* @param bool
|
||||||
* @resturn string
|
* @resturn string
|
||||||
*/
|
*/
|
||||||
protected function _get_compiled($type, $table, $reset)
|
protected function _get_compile($type, $table, $reset)
|
||||||
{
|
{
|
||||||
$sql = $this->_compile($type, $table);
|
$sql = $this->_compile($type, $table);
|
||||||
|
|
||||||
@ -1388,6 +1392,20 @@ class Query_Builder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the compiled query
|
||||||
|
*
|
||||||
|
* @param string $sql
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function _run($sql)
|
||||||
|
{
|
||||||
|
$vals = array_merge($this->values, (array) $this->where_values);
|
||||||
|
return $this->prepare_execute($sql, $vals);
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -407,6 +407,40 @@ abstract class QBTest extends UnitTestCase {
|
|||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public function TestSetArrayUpdate()
|
||||||
|
{
|
||||||
|
if (empty($this->db)) return;
|
||||||
|
|
||||||
|
$array = array(
|
||||||
|
'id' => 4,
|
||||||
|
'key' => 'gogle',
|
||||||
|
'val' => 'non-word'
|
||||||
|
);
|
||||||
|
|
||||||
|
$query = $this->db->set($array)
|
||||||
|
->where('id', 4)
|
||||||
|
->update('create_test');
|
||||||
|
|
||||||
|
$this->assertIsA($query, 'PDOStatement');
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
public function TestWhereSetUpdate()
|
||||||
|
{
|
||||||
|
if (empty($this->db)) return;
|
||||||
|
|
||||||
|
$query = $this->db->where('id', 4)
|
||||||
|
->set('id', 4)
|
||||||
|
->set('key', 'gogle')
|
||||||
|
->set('val', 'non-word')
|
||||||
|
->update('create_test');
|
||||||
|
|
||||||
|
$this->assertIsA($query, 'PDOStatement');
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
public function TestDelete()
|
public function TestDelete()
|
||||||
{
|
{
|
||||||
if (empty($this->db)) return;
|
if (empty($this->db)) return;
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user