Testando SQLInjection

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.

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

Caro Thyago_Pacher,

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