<ul>Programação Web Fatec Ipiranga Análise e Desenvolvimento de Sistemas Aula 09 – Instruções preparadas e otimizando o tr...
Trabalhando com instruções preparadas <ul><li>Uma tarefa comum é executarmos uma consulta a um BD de forma repetitiva, ape...
Fazer isso da forma convencional, ou seja, utilizando os comandos de consulta dentro de loops pode gerar sobrecarga de ace...
Na versão 4.1, o MySQL implementou a possibilidade de utilizarmos “ instruções preparadas ”  que realizam essas tarefas a ...
Há dois tipos de instruções preparadas: </li><ul><li>Associação de parâmetros:  permitir armazenar uma consulta no BD com ...
Associação de resultados:  permitir o uso de arrays para puxar valores dos resultados de consultas associando variáveis PH...
Preparando a instrução <?php // cria uma nova conexão com o BD $mysqli = new mysqli('localhost', 'catalog_user', 'secret',...
Upcoming SlideShare
Loading in …5
×

Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Programação Web

1,382 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,382
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
32
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Programação Web

  1. 1. <ul>Programação Web Fatec Ipiranga Análise e Desenvolvimento de Sistemas Aula 09 – Instruções preparadas e otimizando o tratamento de consultas no MySQL </ul><ul>Dalton Martins </ul><ul>[email_address] </ul><ul>São Paulo, Outubro, 2011 </ul>
  2. 2. Trabalhando com instruções preparadas <ul><li>Uma tarefa comum é executarmos uma consulta a um BD de forma repetitiva, apenas alterando os parâmetros;
  3. 3. Fazer isso da forma convencional, ou seja, utilizando os comandos de consulta dentro de loops pode gerar sobrecarga de acesso ao BD;
  4. 4. Na versão 4.1, o MySQL implementou a possibilidade de utilizarmos “ instruções preparadas ” que realizam essas tarefas a um custo menor de processamento.
  5. 5. Há dois tipos de instruções preparadas: </li><ul><li>Associação de parâmetros: permitir armazenar uma consulta no BD com apenas os dados que mudarem sendo enviados repetidamente e integrados na consulta para execução. Ex.: inserção repetitiva de produtos num BD;
  6. 6. Associação de resultados: permitir o uso de arrays para puxar valores dos resultados de consultas associando variáveis PHP aos campos. </li></ul></ul>
  7. 7. Preparando a instrução <?php // cria uma nova conexão com o BD $mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate'); // cria uma consulta e as campos de armazenamento dos dados $query = &quot;SELECT sku, name, price, description FROM products ORDER BY sku&quot;; // cria um objeto de instrução $stmt = $mysqli->stmt_init(); // prepara a instrução para execução $stmt->prepare($query); .. faz alguma coisa com a instrução preparada // recupera os recursos alocados para a instrução $stmt->close(); // fecha a conexão. $mysqli->close(); ?>
  8. 8. Executando a instrução preparada <ul><li>A forma de execução de uma instrução preparada vai depender se ela vai operar por associação de parâmetros ou de resultados. </li><ul><li>Associação de parâmetros: depois dos parâmetros serem associados com o método bind_param() a instrução é executada;
  9. 9. Associação de resultados: a instrução será executada antes de associar os resultados as variáveis com o método bind_result();
  10. 10. Em ambos os casos, a instrução preparada é executada com o método execute(). </li></ul></ul>
  11. 11. Associando parâmetros <?php // cria uma nova conexão com o banco $mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate'); // cria uma consulta e o os campos a serem parametrizados $query = &quot;INSERT INTO products SET id=NULL, sku=?, name=?, price=?&quot;; // cria um objeto de instrução $stmt = $mysqli->stmt_init(); // prepara a instrução para execução $stmt->prepare($query); // associa os parâmetros e define os tipos // s-> string, s-> string, d-> decimal $stmt->bind_param('ssd', $sku, $name, $price); // Atribui um array coletado via formulário $skuarray = $_POST['sku']; // Atribui um array coletado via formulário $namearray = $_POST['name']; // Atribui um array coletado via formulário $pricearray = $_POST['price']; // Inicializa o contador $x = 0; // loop que percorre todo o array e executa a instrução while ($x < sizeof($skuarray)) { $sku = $skuarray[$x]; $name = $namearray[$x]; $price = $pricearray[$x]; $stmt->execute(); } // Libera os recursos da instrução $stmt->close(); // Fecha a conexão $mysqli->close(); ?>
  12. 12. Associando variáveis <?php // cria uma conexão com o servidor $mysqli = new mysqli('localhost', 'catalog_user', 'secret', 'corporate'); // cria uma consulta $query = 'SELECT sku, name, price FROM products ORDER BY sku'; // cria um objeto de instrução $stmt = $mysqli->stmt_init(); // prepara a instrução para execução $stmt->prepare($query); // executa a instrução $stmt->execute(); //associa os resultados as variáveis $stmt->bind_result($sku, $name, $price); // faz um loop pelos resultados exibindo na tela while($stmt->fetch()) // o método fetch() recupera cada linha retornada como resultado de uma instrução printf(&quot;%s, %s, %s <br />&quot;, $sku, $name, $price); // libera os recursos alocados $stmt->close(); // fecha a conexão $mysqli->close(); ?>
  13. 13. Outros métodos de apoio <ul><ul><li>affected_rows(): retorna o número de linhas afetadas pela última instrução especificada no objeto stmt;
  14. 14. num_rows(): retorna o número de linhas recuperadas pela última instrução especificada pelo objeto stmt; </li></ul></ul>

×