SELECT COM PDO + PHP + OOP

21/07/2021

0

Segue o código usado para o select

    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

Israel Lopes

Responder

Posts

03/08/2021

Alex William

Olá, amigo.

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
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar