Testando SQLInjection

2 respostas Resolvido
php
G

Pessoal,
Estou testando um código para evitar SQLInjection.
Aqui tenho minha classe de conexão onde insiro meu 1º código:

> function ExecuteSQL($query, array $params = NULL) {
>         $this->obj = $this->Conectar()->prepare($query);
>         **if (count($params) > 0) { --> O ERRO APONTA PARA ESTA LINHA
>             foreach ($params as $key => $value) {
>                 $this->obj->bindValue($key, $value);
>             }
>         }
    return $this->obj->execute();
}

Aqui é a 2ª parte do código que é inserido na classe de produtos

function GetProdutosID($id) {

//query para buscar produtos de uma categoria específica

$query = “SELECT * FROM {$this->prefix}produtos p INNER JOIN

{$this->prefix}categorias c ON p.pro_categoria = c.cate_id”;
//multi query concatenando a query select
    $query .= " AND pro_id = :id";
    $params = array(':id' => (int) $id);
    $this->ExecuteSQL($query, $params);

    $this->GetLista();
}

Quando mando executar o código, aparece este aviso:
Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdocs\lojavirtual\model\Conexao.class.php on line 43, que é tratado por esta linha de código: reporta para a linha em negrito na classe de conexão.

Será que poderiam ajudar nesse aviso. É considerado erro?

Obrigado.

2 Respostas

Thyago_Pacher

O erro é normal, ele “executou” a query, porém ao chegar no count dela ele não achou $params, não é um erro fatal então duas coisas:

1)Ou tu camufla os erros do PHP

ini_set(display_errors,0);

ini_set(display_startup_erros,0);
  1. ou valida o if para isset($params) assim ele checa se existe
G
Solucao aceita

Caro Thyago_Pacher,

Obrigado pela informação. Testei e deu certo utilizando a segunda opção. Desculpe demorar a responder.

Criado 25 de fevereiro de 2018
Ultima resposta 3 de mar. de 2018
Respostas 2
Participantes 2