Problema em gerar de strings com encadeamento de métodos
Olá. Tenho uma classe aqui que eu fiz para gerar SQL sem precisar digitar o SQL puro mesmo e pra um pouco de abstração :)
Então... tava fazendo ela toda sem testar, fui testar aqui agora e tem algo estranho que não estou conseguindo compreender.
Parte da classe:
<?php
class SQL_Generator {
/**
* Armazena o atual código SQL
* @access private
* @var string Atual código SQL
*/
private $sql;
/**
* Armazena os valores para o método query do PDO
* @access private
* @var array Valores
*/
private $values = array();
/**
* Retorna o código SQL atual se o objeto
* for usado como uma string
* @access public
* @return string
*/
public function flush() {
return $this->sql;
}
/**
* Adiciona o operador AND ao código SQL atual
* @access public
* @param string ... Condições
* @return SQL_Generator
*/
public function _and() {
if(func_num_args() == 0)
$this->sql .= ' AND';
else {
$clauses = implode(' AND ', func_get_args());
$this->sql .= ' ' . $clauses;
}
return $this;
}
/**
* Adiciona condicional WHERE ao código SQL atual
* Verifica duas condições em tabelas
* @access public
* @param string $column Coluna
* @param array $condiction Condição
* @param bool $return_this Define se o método deve retornar a instância
* @return mixed
*/
public function where($column, array $condiction, $get_code = false) {
$where = sprintf(' %s WHERE `%s` %s', $this->sql, $column, $condiction[0]);
if(isset($condiction['value']))
$this->values[] = $condiction[1];
$this->sql .= $where;
return $this;
}
/**
* Adiciona cláusula FROM ao código SQL atual
* Especifica a tabela para próximos comandos
* @access public
* @param string ... Tabela(s) de onde selecionar
* @return SQL_Generator
*/
public function from() {
$table = func_num_args() == 1 ? func_get_arg(0) : implode('`, `', func_get_args());
$this->sql .= ' FROM `' . $table . '`';
return $this;
}
/**
* Adiciona comando SELECT ao código SQL atual
* Seleciona campos de uma tabela
* @access public
* @param string ... Coluna(s) a selecionar
* @return SQL_Generator
*/
public function select($columns = '*') {
if($columns == '*')
$this->sql = str_replace('`', null, $this->sql);
$this->sql = 'SELECT `' . $columns . '`';
if(func_num_args() > 1)
$columns = implode('`, `', func_get_args());
return $this;
}
/**
* Gera condição de igualdade
* @param mixed $value
* @return array
*/
public function equal($value) {
return ['= ?', $value];
}
}
Ao executar isso...:
$sql = new SQL_Generator;
$query = $sql->select('column', 'coluna')->from('teste')->where('id', $sql->equal('5'));
echo $query->flush();
O retorno é esse:
SELECT column, coluna FROM teste SELECT column, coluna FROM teste WHERE id= ?
Mas o esperado é que o resultado fosse esse:
SELECT column, coluna FROM teste WHERE id= ?
Qual o problema com meu código? Não estou conseguindo entender porque tive esse resultado aí /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/huh.gif&key=796dd2e8f5e667be07f01ae4a535735ac497e0cf1e7e3fc219233ca4d7b2023c" alt="huh.gif" />
Alguém poderia ajudar? /applications/core/interface/imageproxy/imageproxy.php?img=http://forum.imasters.com.br/public/style_emoticons/default/rolleyes.gif&key=059f4015935c07d78cff7b710ea971b8c55160eca53a3829eba1c5cfa965ff83" alt="rolleyes.gif" />
Até mais.
Discussão (1)
Carregando comentários...