Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Comecei a usar o PDO recentemente e estou tentando fazer uma consulta ao banco utilizando o prepare e bindValues. só que sempre é retornado 0 no numero de linhas afetadas. já no uso do insert tudo funcionou corretamente.
código PHP
$sql = $conexao->prepare("SELECT * FROM clientes WHERE endereco LIKE '%:pesquisa%' ORDER BY nome ASC;");
$sql->bindValue(':pesquisa', $pesquisa, PDO::PARAM_STR);
$sql->execute();
$res = $sql->rowCount();
alguém pode me dizer onde se encontra o erro!!!!!!!!!!!!!Entendi o exemplo. Só que eu gostaria de continuar usando o PDO PREPARE pois o valor éenviado pelo usuário.
Você ainda pode utilizar prepare, só deve utilizar COUNT(*) como select.
Só que ainda continua retornando 0. Esse é o código novo:
$sql = $conexao->prepare("SELECT COUNT(*) FROM clientes WHERE nome LIKE '%:pesquisa%' ORDER BY nome ASC;");
$sql->bindValue(':pesquisa', $pesquisa, PDO::PARAM_STR);
$sql->execute();
$res = $sql->fetchColumn();
echo $res;
if($res != 0){
$sql = $conexao->prepare("SELECT * FROM clientes WHERE nome LIKE '%:pesquisa%' ORDER BY nome ASC;");
$sql->bindValue(':pesquisa', $pesquisa, PDO::PARAM_STR);
$sql->execute();
pesquisa($sql);
$conexao = NULL;
}
Se eu uso o PDO query(), o rowCount() funciona normalmente o problema é quando uso o prepare().Seu problema também é a consulta. O named parameter não deve possuir quotes:
'WHERE nome LIKE :pesquisa'
Os quotes são adicionados automaticamente pelo prepared statement conforme a tipagem do atributo.
Por outro lado, os sinais de percent devem ser adicionados ao bindValue:
$sql->bindValue(':pesquisa', '%'.$pesquisa.'%', PDO::PARAM_STR);
[http://php.net/manual/en/pdostatement.bindparam.php#99698](http://php.net/manual/en/pdostatement.bindparam.php#99698)Valeu. Agora funcionou corretamente.
http://php.net/manual/en/pdostatement.rowcount.php#example-1050
>
Citar
For most databases, PDOStatement::rowCount() does not return the number of rows affected by a SELECT statement. Instead, use PDO::query() to issue a SELECT COUNT(*) statement with the same predicates as your intended SELECT statement, then use PDOStatement::fetchColumn() to retrieve the number of rows that will be returned. Your application can then perform the correct action.