quarta-feira, 11 de maio de 2016

Conectando o PHP ao MySql usando MySqli.

Conectando o PHP ao MySql usando MySqli.




Bom dia caros alunos e amigos. É com prazer que venho passar um pouco mais dos meus conhecimentos.


Em um dos meus posts eu mostrei como se conectar o PHP ao MySql usando os comandos não preparados. Hoje vou mostrar como usar as funções preparadas (prepared statements). Mas qual é a diferença entre elas? As funções de acesso à base de dados não preparadas estão depreciadas, ou seja, o MySql não recomenda o uso, pelo contrário recomenda o não uso das mesmas. Isso devido ao fato de dar margem a falha de segurança. As instruções preparadas passam por um processo de preparação antes da execução, daí o nome "prepared statement".

Vamos lá.

1)  O primeiro passo é realizar a conexão com o banco de dados

$con = new mysqli("localhost", "userdb", "123456", "lojavirt");


No exemploa acima a variável $con terá uma conexão, caso o comando new_mysqli seja realizado com sucesso.


O comando new_mysqli cria uma conexão com o banco de dados MySql e precisa receber como parâmetro o nome do servidor (poderá ser o IP ou a string localhost para indicar que é a máquina local), o nome do usuário de banco de dodos que será usado para fazer a conexão, a senha desse usuário no banco de dados e nome do banco de dados que será usado na conexão.


2)  Testar se a conexão com o banco de dados foi realizada com sucesso

Após a execução da instrução de conexão precisamos verificar se a mesma ocorreu com sucesso. Para isso usamos a função mysqli_connect_error.

Veja um exemplo;

if (mysqli_connect_error()) {
    
printf("Falha na conexão: %s\n"mysqli_connect_error());
    
exit();
}



Se a conexão foi realizada com sucesso poderemos, então, executar nossos comando na base de dados.

3) Fazendo uma consulta na base de dados

No exemplo a seguir eu quero pegar o nome do estado que está na tabela ESTADO sabendo que a sigla do mesmo me será passada pelo método POST de um formulário. O campo do formulário tem o nome de 'uf'.

// Pego o valor passado pelo formulário no campo de nome uf
$sig = $_POST['uf'];
// Coloco a query que desejo executar dentro de uma variável de nome $sql
$sql = "Select nome From ESTADO Where sigla = ? ";

Repare que colocamos uma interrogação no lugar onde deveria estar o valor a ser procurado. Toda vez que for necessário usar um valor que esteja em alguma variável em nossa query, nós colocaremos uma interrogação no lugar ao invés de usar uma concatenação ou a própria variável.

Feito isso agora vou preparar o comando para ser executado. Se o comando falhar ele ira devolver um valor lógico false.

if ( $stm = $con->prepare($sql) ) {

}

Se o comando a preparação ocorreu sem problemas, então, poderemos colocar o valor da sigla no lugar da interrogação.


   $stm->bind_param('s',$sig);


A string colocada como primeiro parâmetro é para informar quais são os tipos que serão passados. No nosso caso só existe um único valor a ser passado e é do tipo string, por isso que é apenas um 's'. Se fossem dois valores, por exemplo uma string e um inteiro, então ficaria assim:

   $stm->bind_param('si',$sig,$cod);


E se fossem 4, uma string, um inteiro, um float e outra string:

   $stm->bind_param('sids',$sig,$cod,$preco,$dtnasc);

Após fazer o bind dos valores, podemos executar o comando no banco de dados com o método execute().

$stm->execute();

Após a execução precisamos definir para qual ou quais variáveis irão os resultados do select. Para isso usamos o método bind_result();

$stm->bind_result($nome_est);

Ma linha acima estamos informando ao PHP que o valor que estamos pegando do banco de dados deverá ser colocado na variável $nome_est. Se estamos selecionando mais de uma coluna, então, devemos informar mais de uma variável lembrando que a ordem dos valores retornados será a mesma usada no seu select.

Agora precisamos realizar o método fetch() para que haja a transferência dos valores da linha do banco de dados para a variável.

$stm->fetch();

Podemos mostrar o valor selecionado com o comando echo, por exemplo.

echo $nome_est;

Agora precisamos fechar a conexão.

$con->close();


O exemplo completo fica assim:

<?php

$con = new_mysqli("localhost""userdb""123456""lojavirt");
if (mysqli_connect_error()) {
    
printf("Falha na conexão: %s\n"mysqli_connect_error());
    exit();
}
// Pego o valor passado pelo formulário no campo de nome uf
$sig = $_POST['uf'];
// Coloco a query que desejo executar dentro de uma variável de nome $sql
$sql = "Select nome From ESTADO Where sigla = ? ";


if ( $stm = $con->prepare($sql) ) {
  $stm->bind_param('s',$sig);
  $stm->execute();
  $stm->bind_result($nome_est);
  $stm->fetch();
  echo $nome_est;
}

$con->close();


?>

Por hoje é só, pessoal!