falcao544 11 Denunciar post Postado Maio 6, 2012 Olá pessoal, bom, a minha dúvida é a seguinte, existe alguma diferença entre usar parâmetros com nomes e parâmetros com pontos de interrogação quando se escreve o "corpo" da consulta? exemplo: SELECT nome FROM tabela WHERE nome= ? ou :nome Outra dúvida é no seguinte código: <?php $consulta = "SELECT email FROM dados WHERE email = ?"; $rt = $conexao->prepare($consulta); $rt->bindParam(1, $mail); try{ $rt->query(O QUE COLOCO AQUI?); // DEVO COLOCAR $consulta OU $rt? } ?> Devo passar para o método bindParam $consulta ou $rt? Quando eu tiver apenas um parâmetro na consulta é necessário o uso do índice "1" no bindParam? Obrigado! EDIT: Eu esqueci de perguntar: Como o prepared statement evita SQL Injection? Obrigado! EDIT2: Eu li que PDO::__construct() joga um PDOException caso a conexão falhe! Se eu quiser que aconteça a mesma coisa com o método query como eu faço? Uso o método setAttribute ou se eu usar try/catch(PDOException $objeto) já consigo o erro? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 6, 2012 use execute() no lugar de query(). por exemplo se você tiver mto campos para inserir, acho q as '?' não são um boa ideia, se precisar adicionar ou remover algum campo do meio sera chato e ainda tera q reindexar os binds <?php $consulta = "SELECT email FROM dados WHERE email = ?"; $rt = $conexao->prepare($consulta); $rt->bindParam(1, $mail); try{ $rt->execute(); $result = $rt->fetchAll(PDO::FETCH_ASSOC); } ?> Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 6, 2012 Eu li no php.net que é melhor usar o execute quando a consulta tiver que ser feita várias vezes! http://br.php.net/manual/en/pdo.query.php Tá no 2º parágrafo! O que eu devo usar então? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 6, 2012 a consulta vai ser mto usanda? Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 6, 2012 Eu não sei se entendi direito! Se você está perguntando se ela vai ser muito usada no código a cada execução, a respota é não, ela será usada apenas para verificar se o e-mail já está cadastrado! Se você estiver perguntando se a query vai ser muito usada no dia a dia eu acho que sim, pois ela usada para validar o cadastro! Obrigado! Ah! você viu os meus dois edit's? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 6, 2012 eu uso try-catch. quanto ao sql injection você pode colocar checagem de tipo no bind e provavelmente o pdo deve fazer escape de aspas, barras e outros caracteres. se você utilizasse o mysql_* teria q fazer manualmente. Compartilhar este post Link para o post Compartilhar em outros sites
Estud@nte 6 Denunciar post Postado Maio 6, 2012 //Verifica se o parametro passado é inteiro $stmt->bindValue(':cidade_id', $this->_cidade_id, PDO::PARAM_INT); //Verifica se o parametro passado é uma string $stmt->bindValue(':nome_empresa', $this->_nome_empresa, PDO::PARAM_STR); sobre as consultas tenho em média mais de 50k por dia, tem uma boa performace, pode usar sem medo o execute(); Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 6, 2012 Então o método query joga uma exceção automaticamente assim como o PDO::__construct? EDIT: Qual a diferença entre $objeto->execute($query) e $objeto->execute(); Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 6, 2012 se consulta for invalida sim, ai vai retornar o sqlstate Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 6, 2012 "PDO::query() returns a PDOStatement object, or FALSE on failure." O que pode ser considerado falha? Se não retornar nenhum resultado, é considerado falha? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 6, 2012 falha, consulta com sintaxa errada, timeout, etc... se n retornar nada é pq a condição da consulta n foi satisfeita. Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 6, 2012 Muito obrigado shini pela atenção! Estou começando hoje a aprender PDO! Abrss! EDIT: Qual método é similiar a função mysql_num_rows? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Maio 6, 2012 cara isso aqui (mysql_num_rows) é uma novela, o similar seria rowCount(). Tinha um topico falando sobre isso outro dia rsrs. se olhar o manual ta escrito assim: If the last SQL statement executed by the associated PDOStatement was a SELECT statement, some databases may return the number of rows returned by that statement. However, this behaviour is not guaranteed for all databases and should not be relied on for portable applications alguns dizem q é melhor usar count() pq é mais garantido... Compartilhar este post Link para o post Compartilhar em outros sites
falcao544 11 Denunciar post Postado Maio 6, 2012 Então eu teria que usar o método fetch pra depois usar a função count? EDIT: columnCount serve? Compartilhar este post Link para o post Compartilhar em outros sites