Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

falcao544

PDO - método prepare e query

Recommended Posts

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

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

a consulta vai ser mto usanda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

//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

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

se consulta for invalida sim, ai vai retornar o sqlstate

Compartilhar este post


Link para o post
Compartilhar em outros sites

"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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.