Jedi Tux

PHP e MySQL funções para conexões e consultas

Posted in PHP by Fernando Basso on 20 de maio de 2012

TODO: em alguns pontos eu mencionei que alguma funções retornam um array, sendo que elas retorna um object com os dados da query. Concertar isso.

PHP e MySQL

Introdução

As principais funções para estabelecer uma conexão no banco de dados e selecionar uma database para usada são mysql_connect(), mysql_set_charset() e mysql_select_db();

Nas versões mais novas do MySQL essas (e outras) funções foram melhoradas (Improved) e hoje temos as funções mysqli_connect(), mysqli_set_charset() e mysqli_select_db().

MySQL – Básico

mysql_connect() e mysqli_connect

Essas funções abrem (ou reusam) uma conexão com um servidor MySQL. Os parâmetros mínimos (e os mais úteis) esperados pelo mysql_connect e mysqli_connect são o nome do host onde está o banco de dados mysql, o nome do usuário no banco de dados, e o password desse usuário. Não importa qual das funções você use, esses três parâmetros são os mesmos:

mysql_connect(‘localhost’, ‘admin’, ‘secretPass’);

ou

mysqli_connect(‘localhost’, ‘admin’, ‘secretPass’);

Essas duas funções retornam um identificador de link mysql quando a conexão foi bem sucedida, e FALSE quando houve algum tipo de erro. O identificador de link é usado para referenciar a conexão com o banco de dados toda vez que precisarmos executar uma query. Por esse motivo, sempre atribuímos valor retornado a uma variável para facilitar o seu uso posterior. Veja:

$dblinkid = mysqli_connet(‘localhost’, ‘admin’, ‘secretPass’);

Se a conexão foi bem sucedida, de agora em diante podemos usar a variável $dblinkid em outras funções para realizar queries. Exemplos serão mostrados em momentos oportunos.

mysql_set_charset() vs mysqli_set_charset()

Usadas para estabelecer o encoding da conexão, estas duas funções precisam dos parâmetros identificador de link e charset. O identificador de link nós já conhecemos, no exemplo anterior, colocamos ele na variável $dblinkid. Quanto ao charset, normalmente usamos utf8. O “problema” é que a ordem em que passamos esses argumentos muda. Veja nos exemplos como ficariam esses parâmetros e sua ordem:

mysql_set_charset(‘utf8’, $dblinkid);

ou

mysqli_set_charset($dblinkid, ‘utf8’);

Colocando esses parâmetros na ordem errada resulta um erro parecido com este:

Warning: mysqli_set_charset() expects parameter 1 to be mysqli,

string given in /caminho/para/arquivo.php

ou

Warning: mysql_set_charset() expects parameter 1 to be string,

object given in /caminho/para/arquivo.php

Os parâmetros são os mesmo, mas a ordem não. Lembre-se disso.

mysql_select_db() vs mysqli_select_db()

Funções usadas para especificar o banco de dados dentro de servidor MySQL. Os parâmetros esperados são o identificador de link (viu como ele é importante?) e o nome da database no servidor. Novamente, o que muda é a ordem, embora os parâmetros sejam os mesmos.

mysql_select_db(‘db_articles’, $dblinkid);

ou

mysqli_select_db($dblinkid, ‘db_articles’);

Se nada saiu errado nos três passos vistos até agora, a conexão foi estabelecida. Em todo caso, podemos e devemos verificar por erros para ter certeza, tornando o código mais robusto e confiável. Continue lendo.

 

 Verificando por Erros (mysql)

Em breve (é algo bem simples).

Queries – mysql_query vs mysqli_query

Colocamos uma query mysql em uma variável, por exemplo:

$sql = ‘SELECT id, nome FROM tb_pessoas’;

E usamos uma das funções para executar a query. Mais uma vez o que muda é apenas a ordem dos parâmetros.

mysql_query($sql, $dblinkid);

ou

mysqli_query($dblinkid, $sql);

Essas funções retornam FALSO em caso de erro. Por outro lado, queries bem sucedidas com SELECT (e alguns outros comandos sql) retornam um result object ou result set, que é um array contendo o resultado da query. Por esse motivo, atribuímos esse result object a uma variável para futura manipulação dos dados.

$result_set = mysqli($dblinkid, $sql);

O array retornado pode ser acessado por um punhado de funções, cada uma com sua particularidade, sendo que a escolha de uma vai depender do resultado desejado.

Extraindo dados do result object / result set) (mysql)

As principais funções para recuperar dados de um result set (que contém um array com os dados solicitados na query) são mysqli_fetch_assoc(), mysqli_fetch_row() e mysqli_fetch_array(). Outras duas funções que são úteis em diversas situações são mysqli_num_fields() e mysqli_field_name(). Todas essas funções também estão disponíveis na versão mais antigas – aquelas que não contém o “i” após “mysql” (mysqli).

Esta é a nossa tabela no banco de dados:

Note que temos três colunas, c_id, c_text, e c_author e sete tuplas, linhas ou rows (fileiras).

mysqli_fetch_row()

A função mysqli_fetch_row() espera um result set como parâmetro e retorna uma tupla em forma de array com índices numéricos. No caso da tabela acima, o array retornado teria o índice [0] como a coluna c_id, o índice [1] como c_text, e o índice [2] como c_author. Tenha em mente que se você mudar a ordem das colunas na query SQL, mudará o conteúdo que os [índices] irão acessar. Outro fator importante é que cada chamada subsequente dessa função retorna a próxima tupla/item/row do result set, e NULL quando não há mais tuplas restantes, e por esse motivo podemos usar essa função dentro de loops (já que loops dependem de verdadeiro ou falso decidir se sua execução será encerrado ou deve continuar). Cada vez que a função é chamada, o ponteiro interno é movido para o próximo registro da consulta (query). Essa funcionalidade é útil para que possamos mostrar todas as tuplas de uma determinada tabela. Veja:

/* Enquanto há elementos a serem atribuídos a variaável $minha_tupla,

* retorna o elemento propriamente dito, e um TRUE. */

while ($minha_tupla = mysqli_fetch_row($result_set) {

echo(‘<p>’); print_r($minha_tupla); echo(‘</p>’);

$output = $minha_tupla[1] // [1] é a coluna c_text.

inlcude(‘./output.html.php’);

}

No exemplo acima, cada vez que o while executar, a próxima tupla do result set (que é um array) será retornada e assinada à variável $minha_tupla, e então guardamos o valor do índice [1] (c_text) na variável $output. Essa variável é então mostrada através de um arquivo especial para isso, pois assim evitamos misturar html e php no mesmo código/arquivo. O conteúdo do arquivo output.html.php é simples:

<p><?php echo($output); ?></p>

A linha que contém o print_r() é usada para mostrar a estrutura da tupla. Útil para debugar.

mysqli_fetch_assoc()

Tudo o que falamos sobre mysqli_fetch_row() tambémse aplica para mysqli_fetch_assoc(). A diferença é que em vez de acessarmos os índices do array retornado com um valor numérico, usamos uma string, por que o array retornado é associativo (como o nome da função sugere).

while ($minha_tupla = mysqli_fetch_assoc($result_set) {

$output = $minha_tupla[‘c_author’];

include(‘./output.html.php’);

}

Note que passamos o exato nome da coluna na tabela mysql como o índice do array $minha_tupla.

mysqli_fetch_array()

Essa função é mais elaborada porque ele pode retornar tanto um array com índice numérico, associativo, ou ambos.

while ($tupla_array = mysqli_fetch_array($result_set, MYSQLI_BOTH)) {

$output = $tupla_array[2];

include(‘./output.html.php’);

$output = $tupla_array[‘c_text’];

include(‘./output.html.php’);

}

Veja um simples resumo dos três tipos.

/* Índice numérico. */

while ($tuple = mysqli_fetch_row($result_object)) {

$output = $tuple[1];

}

/* Índice associativo. */

while ($tuple = mysqli_fetch_assoc($result_object)) {

$output = $tuple[‘c_author’];

}

/* Índice ou numérico, ou associativo, ou ambos. */

while ($tuple = mysqli_fetch_array($result_object, MYSQLI_BOTH)) {

// MYSQLI_NUM

// MYSQLI_ASSOC

$output1 = $tuple[1];

$output2 = $tuple[‘c_author’];

}

Se encontrar um erro, quiser fazer uma sugestão, o seja lá o que for, pode postar nos comentários.

Multiplica

Posted in PHP by Fernando Basso on 18 de janeiro de 2010

Este também é um simples aplicativo. Ele multiplica dois números digitados pelo usuário.

index.php

<?php
if (!$_POST['submit']) {
    include('form_times.html');
}
else {
    $a = $_POST['a'];
    $b = $_POST['b'];
    if (($a == NULL) OR ($b == NULL)) {
        echo('Não deixe em branco.<br>');
        echo("<a href='.'><b>Okay. Eu entendi!</b></a>");
    }
    elseif ((!is_numeric($a)) OR (!is_numeric($b))) {
        echo('Tabuadas são feitas com números. Por favor digite um
            número.<br>');
        echo("<p><a href='.'><b>Nova Tabuada</b></a></p>");
    }
    else {
    echo('<table border="1" cellspacing="5" cellpadding="5">');
        echo('<tr>');
        $produto = ($a * $b);
        echo("<td>$a x $b = $produto</td>");
        echo('</tr>');
        echo('</table>');
        echo("<p><a href='.'><b>New Tabuada</b></a></p>");
    }
}
?>

form_times.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
 <!-- 
   * HTML 4.01 Strict
   * Version:     1.1
   * E-Mail:      Athunye@gmail.com
   * Website:     http://www.jeditux.wordpress.com
   * Date:        Monday, January 18, 15:51
   * Powered by GNU/Linux and Vim - Vi Improved
 -->
<html lang='pt_br'>
  <head>
    <meta http-equiv='content-type' content='text/html; charset=utf-8'>
    <title>form_times.html</title>
  </head>

<body>

  <form method='post' action=''>
    Quero multiplicar
    <input name='a' type='text' size='4'>
    por
    <input name='b' type='text' size='4'>
    <input type='submit' name='submit' value='Multiplicar'>
  </form>

</body>
</html>

Tabuada2

Posted in PHP by Fernando Basso on 18 de janeiro de 2010

Esta é uma outra forma de escolher qual tabuada será mostrada. Usamos a tag select, o que causa um menu drop down.

index.php

<?php
if (!$_POST['submit']) {
    include('form_math.php');
}
else {
    echo('<table border="1" cellspacing="5" cellpadding="5">');

    $a = $_POST['qual'];
    echo($a);
    if ($a == NULL) {
        echo('Não deixe em branco.<br>');
        echo("<a href='.'><b>Okay. Eu entendi!</b></a>");
    }
    elseif (!is_numeric($a)) {
        echo('Tabuadas são feitas com números. Por favor digite um
            número..<br>');
        echo("<p><a href='.'><b>Nova Tabuada</b></a></p>");
    }
    else {
        for ($n = 0; $n < 11; ++$n) {
            echo('<tr>');
            $produto = ($a * $n);
            echo("<td>$a x $n = $produto</td>");
            echo('</tb>');
        }
        echo('</table>');
        echo("<p><a href='.'><b>Nova Tabuada</b></a></p>");
    }
}
?>

form_math.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
 <!-- 
   * HTML 4.01 Strict
   * Version:     1.1
   * Website:     http://www.jeditux.wordpress.com
   * Date:        Monday, January 18, 15:51
   * Powered by GNU/Linux
 -->
<html lang='pt_br'>
  <head>
    <meta http-equiv='content-type' content='text/html; charset=utf-8'>
    <title>form_math.php</title>
  </head>

<body>

  <form method='post' action=''>
    Qual tabuada deseja ver?
    <select name='qual' id='qual'>
    <?php
    for ($n = 0; $n <= 10; ++$n) {
     echo("<option value='$n'>$n</option>");
    }
    ?> 
    </select>
    <input type='submit' name='submit' value='Ver Tabuada'>
  </form>

</body>
</html>
?>

<

Tabuada1.php

Posted in PHP by Fernando Basso on 18 de janeiro de 2010

Aqui está o código de uma tabuada. São dois arquivos. Coloque-os dentro uma pasta só para eles.

index.php

<?php // index.php
if (!$_POST['submit']) {
    include('form_math.html');
}
else {
    echo('<table border="1" cellspacing="5" cellpadding="5">');

    $a = $_POST['a'];
    if ($a == NULL) {
        echo('Não deixe em branco.<br>');
        echo("<a href='.'><b>Okay. Eu entendi!</b></a>");
    }
    elseif (!is_numeric($a)) {
        echo('Tabuadas são feitas com números. Por favor digite um
            número seu imbecíl.<br>');
        echo("<p><a href='.'><b>Nova Tabuada</b></a></p>");
    }
    else {
        for ($n = 0; $n < 11; ++$n) {
            echo('<tr>');
            $produto = ($a * $n);
            echo("<td>$a x $n = $produto</td>");
            echo('</tb>');
        }
        echo('</table>');
        echo("<p><a href='.'><b>Nova Tabuada</b></a></p>");
    }
}
?>

form_math.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
 <!-- 
   * HTML 4.01 Strict
   * Date:        Monday, January 18, 15:51
   * Powered by GNU/Linux
 -->
<html lang='pt_br'>
  <head>
    <meta http-equiv='content-type' content='text/html; charset=utf-8'>
    <title>form_math.html</title>
  </head>
<body>
  <form method='post' action=''>
    Qual tabuada deseja ver?
    <input name='a' type='text' size='4'>
    <input type='submit' name='submit' value='Ver Tabuada'>
  </form>

</body>
</html>

2_php

Posted in PHP by Fernando Basso on 9 de setembro de 2009
/* De saída vamos declarar duas variáveis e assinar algum valor a elas. 
 * Por assinar um valor a uma variável, podemos entender como "guardar"
 * algum conteúdo dentro da variável. */
$meu_nome = "Jedi Tux"; // Assinamos "Jedi Tux" à variável '$meu_nome'.
$minha_idade = 30; // Assinamos '30' à variável '$mimha_idade'.

print($meu_nome); // Mostra o valor/conteúdo da variável '$meu_nome'.
print($minha_idade); // Mostra o conteúdo/valor da variável '$minha idade'.

Para definir uma variável colocamos $ na frente do nome que desejamos. Use letras e underscore para criar seus nomes de variáveis.

Concatenar Strings

Para concatenar (emendar) strings usamos o Operador de Concatenação. O operador de concatenação é o simples ponto. Este –> . Viu? Não? Olhe bem –> . É pequeninho mesmo!

$texto_a = "Bom dia!";
$texto_b = "Como está?";
echo($texto_a . " " . $texto_b); 

Neste exemplo, estamos mostrando 2 vars (var = apelido carinhoso para ‘variável’) com uma string no meio.
“Que string no meio?” posso ouvir você perguntando. Ora! ” ” cria uma string de um espaço em braco. Parece pouco, mas tente fazer aquela linha 03 assim: echo($texto_a . $texto_b); pra ver como aquela stringzinha é importante.

echo($texto_a . "<br />" . $texto_b); // Inserimos uma quebra de linha.

Nestes exemplos usamos variáveis, mas como estas variáveis contém strings, o que realmente estamos manipulando: variáveis ou strings?

1_php

Posted in PHP by Fernando Basso on 9 de setembro de 2009
<?php
print("Hello World!<br />");
echo("May the force be with you.<br />");
echo('Que a força esteja com você.<br />');
?>

Em php, podemos usar a função print() ou echo() para mostrar algo na saída padrão. Strings devem obrigatoriamente estar entre aspas simples ou duplas.

print("Uma string com print.");
echo("Uma string com echo.");
; // ponto e vírgula 

é usado para determinar o fim de uma sentença. O fim de uma linha de código.

<br />

é uma tag XHTML que usamos para “quebrar a linha”, ou seja, pular para a próxima linha.

// Comentário de uma linha

para comentários de uma linha.

/* Comentário de
várias linhas. Não 
importa quantas.*/

para comentários de mais de uma linha.

<?php&#91;/sourcecode&#93; para iniciar um código em php.

&#91;sourcecode language='php'&#93;?>

para finalizar o código em php.