SELECT COM PDO + PHP + OOP
Segue o código usado para o select
Se fizer a consulta sem parâmetros para o Where tudo certo, vai de boa sem erro.
Porem quando faço uma busca com parâmetro não vai
Exemplo:
A titulo de informação a tabela se chama EQMARCA e o campo CODMARCA existe, bem como na URL é passado o valor corretamente.
Onde estou errando?
Podem me ajudar?
Já refiz a função mas não consegui localizar o erro.
public function select($where = null, $order = null, $limit = null, $fields ='*'){ $where = strlen($where) ? 'where '.$where : ''; $order = strlen($order) ? 'order by '.$order : ''; $limit = strlen($limit) ? 'limit '.$limit : ''; $query = 'select '.$fields.' from '.$this->table.' '.$where.' '.$order.' '.$limit; return $this->execute($query); }
Se fizer a consulta sem parâmetros para o Where tudo certo, vai de boa sem erro.
Porem quando faço uma busca com parâmetro não vai
Exemplo:
public static function getMarca($id){ return (new Database('eqmarca'))->select('codmarca = '.$id); }
A titulo de informação a tabela se chama EQMARCA e o campo CODMARCA existe, bem como na URL é passado o valor corretamente.
Onde estou errando?
Podem me ajudar?
Já refiz a função mas não consegui localizar o erro.
Israel Lopes
Curtidas 0
Respostas
Alex William
21/07/2021
Olá, amigo.
Deixe sua função assim:
O problema estava no seguinte:
A função strlen retorna um inteiro, e não um bolean.
Se seu "where" tem 12 caracteres ("codmarca = 1"), ele estaria testando "if(12)? sim : não" e 12 não é uma condição para um IF.
já a função "empty" retorna "TRUE" se for vazia e "FALSE" se tiver um valor, e essa é uma condição valida.
Quando eu coloco a sintaxe:
Estou dizendo "Se a variavel where for diferente(!) de vazio, concatene".
Porque não dava erro quando não tinha where?
Simples: quando não havia where, o strlen retornava 0, e 0 = false.
Espero ter ajudado. :D
Deixe sua função assim:
public function select($where = null, $order = null, $limit = null, $fields ='*'){ $where = !empty($where) ? 'where '.$where : ''; $order = !empty($order) ? 'order by '.$order : ''; $limit = !empty($limit) ? 'limit '.$limit : ''; $query = 'select '.$fields.' from '.$this->table.' '.$where.' '.$order.' '.$limit;
O problema estava no seguinte:
A função strlen retorna um inteiro, e não um bolean.
Se seu "where" tem 12 caracteres ("codmarca = 1"), ele estaria testando "if(12)? sim : não" e 12 não é uma condição para um IF.
já a função "empty" retorna "TRUE" se for vazia e "FALSE" se tiver um valor, e essa é uma condição valida.
Quando eu coloco a sintaxe:
$where = !empty($where) ? 'where '.$where : '';
Estou dizendo "Se a variavel where for diferente(!) de vazio, concatene".
Porque não dava erro quando não tinha where?
Simples: quando não havia where, o strlen retornava 0, e 0 = false.
Espero ter ajudado. :D
GOSTEI 0