MySQL Para usar o MySQL com o PHP é necessário ter o servidor MySQL instalado e o pacote php5-mysql, onde no Debian ou Ubuntu podemos instalar esses pacotes com o comando apt-get. # apt-get install mysql-server # apt-get install php5-mysql Todas as funções mysql que veremos exibem mensagens de erro, caso ocorra erros e deseje personalizar suas próprias mensagens de erro, use o arroba @ antes da função mysql, por exemplo @mysql_connect. Para utilizar as funções mysql abaixo usaremos o banco de dados teste, o usuário aluno1 e a tabela produtos com os campos (CodigoProduto, Produto e Preco) criados anteriormente na aula de instalação e configuração do servidor LAMP (Linux, Apache, Mysql, Php e PhpMyAdmin). Produtos CodigoProduto Produto Preco 1
mysql_connect int mysql_connect(string [Host [:porta] [:caminho_socket]], string [Usuário], string [Senha]) Faz uma conexão com o servidor MySQL, retornando TRUE se for executado com sucesso, caso contrário retorna FALSE. No campo Host pode ser usado um endereço IP (192.168.1.10) ou um nome de host (mysql.dominio.com.br), normalmente é usado o endereço local localhost ou 127.0.0.1. É possível também especificar uma porta ( localhost:3306 ) ou um caminho para o socket do MySQL ( localhost:/var/run/mysqld/mysqld.sock ). com o banco mysql_pconnect 2
int mysql_pconnect(string [Host [:porta] [:caminho_socket]], string [Usuário], string [Senha]) É idêntica a função mysql_connect, com a diferença que o link identificador de conexão fica de forma persistente, depois que o script Php encerra a conexão não será fechada. Isso torna o início de uma conexão mais rápido se o mesmo script Php for aberto novamente ou por outro script. $conexao=@mysql_pconnect("localhost","aluno1","senha") or die ("Erro ao conecta com o banco mysql_close int mysql_connect(int Identificador) 3
Fecha uma conexão com o servidor MySQL especificado um identificador de conexão usando a função mysql_connect, está função é obrigatória em todos scripts de conexão com o banco de dados. com o banco mysql_error string mysql_error(int Identificador) Exibe a mensagem de erro da última função MySQL $conexao=@mysql_connect("localhost","qualquerusuario","senha") or die ("Erro: ". 4
Erro: Access denied for user 'qualquerusuario'@'localhost' (using password: YES) mysql_error string mysql_error(int Identificador) Exibe os números dos erros internos do servidor MySQL $conexao=@mysql_connect("localhost","qualquerusuario","senha") or die ("Númer do 5
Número do erro: 1045 mysql_db_query int mysql_db_query(string Banco, string consultasql, int Identificador) Seleciona um banco de dados no servidor MySQL e executa uma consulta SQL usando um identificador, retorna TRUE se for executado com sucesso e FALSE se ocorrer erro. O exemplo abaixo seleciona o banco de dados teste com a função mysql_db_query e executa a consulta SQL SELECT na tabela produtos. # seleciona o banco teste, e executa a consulta SELECT 6
$resultado = mysql_db_query("teste","select * FROM produtos",$conexao); if(!$resultado) echo "Não foi possível fazer a consulta no banco"; else echo "A consulta foi executada com sucesso!!!"; A consulta foi executada com sucesso!!! mysql_select_db int mysql_select_db(string Banco, int Identificador) Seleciona um banco de dados especificado no servidor MySQL usando um identificador opcionalmente, retorna TRUE se for executado com sucesso e FALSE se ocorrer erro. 7
O exemplo abaixo seleciona o banco de dados teste usando a função mysql_select_db usando o link identificador conexao com a função mysql_connect # seleciona o banco teste, e executa a consulta SELECT mysql_query int mysql_query(string consultasql, int Identificador) Executa uma string SQL no banco de dados MySQL especificado por um identificador opcionalmente e exibe o resultado da consulta ao banco, retorna FALSE se ocorrer erro. 8
O exemplo abaixo executa a string SQL SELECT usando a função mysql_query # seleciona o banco teste, e executa a consulta SELECT # seleciona a tabela de produtos $stringsql = "SELECT * FROM produtos"; # executa a consulta SQL $consulta = mysql_query($stringsql,$conexao); mysql_affected_rows int mysql_affected_rows(int Identificador) Retorna o total de linhas afetadas por uma consulta SQL INSERT, UPDATE ou DELETE, com exceção na consulta DELETE sem especificar a cláusula WHERE que retorna 0. 9
O exemplo abaixo conecta ao servidor localhost usando o usuário aluno1 ao banco de dados teste, insere um linha de registro na tabela produtos, executa a consulta SQL com o comando mysql_query e exibe o resultador com mysql_affected_rows. # seleciona o banco teste mysql_select_db("teste",$conexao) or die ("Erro ao conectar a banco de dados"); # insere um registro na tabela produtos $Consulta = "INSERT INTO produtos(produto,preco)values('cd','4.99')"; # executa a consulta SQL $Resultado = mysql_query($consulta,$conexao); # exibe o resultado da consulta echo "Foram afetadas: <b>". mysql_affected_rows($conexao). "</b> linha(s)"; Foram afetadas: 1 linha(s) mysql_num_rows 10
int mysql_num_rows(int Resultado) Retorna o número total de linhas de uma consulta SQL. O exemplo abaixo retorna o número total de linhas com a função mysql_num_rows da string SQL SELECT usando a função mysql_query. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # exibe o número total de registros echo "O número total de registros é: <b>". mysql_num_rows($resultado)."</b><br O número total de registros é: 1 11
mysql_num_fields int mysql_num_fields(int Resultado) Retorna o número total de campos de uma tabela. O exemplo abaixo retorna o número total de campos com a função mysql_num_fields da string SQL SELECT usando a função mysql_query. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # exibe o número total de registros echo "O número de campos é:<b>".mysql_num_fields($resultado)."</b><br>\n"; 12
O número total de campos é: 3 mysql_list_dbs int mysql_list_dbs(int Identificador) Retorna todas as tabelas do banco de dados usando uma conexão com um identificador. Para retornar o nome das tabelas, use a função mysql_tablename. O exemplo abaixo retorna os bancos de dados usando a função mysql_list_dbs, o número total de bancos com a função 13
mysql_num_rows e exibe os nomes dos bancos usando o loop for junto com a função mysql_tablename começando a partir de 0 (banco1 0, banco2 1,...). $conexao=@mysql_connect("localhost","root","senha_root") or die ("Erro ao conec # seleciona as tabelas do banco teste $bancos = mysql_list_dbs($conexao) or die ("Erro ao acessar o banco ".mysql_err # exibe todos os bancos for($x=0; $x < mysql_num_rows($bancos); $x++) { echo "Banco $x: ". mysql_tablename($bancos, $x)."<br>\n"; } Banco 0: information_schema Banco 1: mysql Banco 2: teste... mysql_list_tables 14
int mysql_list_tables(string Banco, int Identificador) Retorna todas as tabelas do banco de dados usando uma conexão com um identificador. Para retornar o nome das tabelas, use a função mysql_tablename. O exemplo abaixo é idêntico ao exemplo anterior com a função mysql_list_dbs. $conexao=@mysql_connect("localhost","root","senha_root") or die ("Erro ao conec # seleciona as tabelas do banco teste $tabelas = mysql_list_tables("mysql",$conexao) or die ("Erro ao acessar o banco # exibe todas as tabelas do banco for($x=0; $x < mysql_num_rows($tabelas); $x++) { echo "Tabela $x: ". mysql_tablename($tabelas, $x)."<br>\n"; } 15
Tabela 0: columns_priv Tabela 1: db Tabela 2: func... mysql_tablename string mysql_tablename(int Resultado, int Indice) Exibe o nome de uma tabela em um banco de dados. Para retornar o total do número de tabelas, use a função mysql_num_rows. O exemplo abaixo é idêntico ao exemplo anterior com a função mysql_list_tables. $conexao=@mysql_connect("localhost","root","senha_root") or die ("Erro ao conec # seleciona as tabelas do banco teste $tabelas = mysql_list_tables("mysql",$conexao) or die ("Erro ao acessar o banco 16
# exibe todas as tabelas do banco for($x=0; $x < mysql_num_rows($tabelas); $x++) { echo "Tabela $x: ". mysql_tablename($tabelas, $x)."<br>\n"; } Tabela 0: columns_priv Tabela 1: db Tabela 2: func... mysql_fetch_array array mysql_fecth_array(int Resultado, int TipoResultado) Exibe um array de linhas de registros de uma tabela no banco de dados. Esta função retorna uma lista indexada com os nomes dos campos da tabela como índices, é possível também usar valores numéricos para os 17
campos começando de um 1 (campo[1], campo[2],...). O tipo de resultado não é obrigatório, podendo ser: MYQL_ASSOC (índices associativos com os nomes dos campos), MYSQL_NUM (índices numéricos campo[1], campo[2],...) ou MYQL_BOTH (ambos). Exemplo1: O exemplo abaixo exibe as linhas com os registros da tabela produtos em um array com o loop for, onde é usado o nome do campo. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena os campos da tabela $campos = mysql_fetch_array($resultado); # exibe as linhas com os registros da tabela produtos for($x=0; $x <= mysql_num_rows($resultado); $x++) { echo "Produto: ".$campos["produto"]." Preço: ".$campos["preco"]."<br>\n"; } 18
Exemplo2: Este exemplo usa o loop while e exibe os campos usando valores numéricos # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena os campos da tabela e os exibe usando indices numéricos campo[1],cam while($campos = mysql_fetch_array($resultado,mysql_num)) { echo "Produto: ".$campos[1]." Preço: ".$campos[2]."<br>\n"; } Produto: CD Preço: 4.99 mysql_fetch_row 19
array mysql_fecth_row(int Resultado) É idêntica a função mysql_fetch_array, com a diferença que exibe um array de linhas de registros de uma tabela no banco de dados, retornando uma lista indexada com os nomes dos campos da tabela como índices, usando valores numéricos para os campos começando de zero 0 (campo[0], campo[1],...). O exemplo abaixo exibe as linhas com os registros da tabela produtos em um array com o loop while, onde é usado o nome do campo. Assim como a função mysql_fetch_array é possível usar o loop for. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena os campos da tabela e os exibe usando indices numéricos campo[0],cam while($campos = mysql_fetch_row($resultado)) { echo "CódigoProduto:<b>".$campos[0]."</b> Produto:<b>".$campos[1]."</b> Preço: } 20
CódigoProduto:1 Produto:CD Preço:4.99 mysql_fetch_object object mysql_fecth_object(int Resultado) Retorna um objeto com atributos referente a linha de registro da tabela. Para especificar os tipos dos campos é necessário utilizar o caractere ->. Este exemplo retorna os valores do campos código do produto, produto e preco da tabela produtos. 21
# seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena os campos da tabela e os exibe usando indices numéricos campo[0],cam while($campos = mysql_fetch_row($resultado)) { echo "CódigoProduto:<b>".$campos[0]."</b> Produto:<b>".$campos[1]."</b> Preço: } Produto:CD Preço:4.99 mysql_fetch_field object mysql_fecth_array(int Resultado, int TipoCampo) 22
Retorna as propriedades de uma coluna de uma tabela na forma de um objeto que pode ser: name retorna o nome da coluna; table rertorna a tabela a qual pertence a coluna; max_length retorna o tamanho máximo da coluna; not_null retorna 1 se a coluna não for nula; primary_key - retorna 1 se a coluna for uma chave primária; unique_key - retorna 1 se a coluna for uma chave única; multiply_key - retorna 1 se a coluna não for uma chave única; blob retorna 1 se a coluna um campo BLOB usado para imagens; type - retorna o tipo da coluna; unsigned - retorna 1 se a coluna não tiver sinal; zerofill - retorna 1 se a coluna for preenchida com zeros. Para especificar os tipos dos campos é necessário utilizar o caractere ->. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena o nome da tabela $tabela = mysql_fetch_field($resultado); 23
echo "O nome da tabela é: <b>".$tabela->table."</b><br>\n"; # armazena os nomes dos campos da tabela while($campos = mysql_fetch_field($resultado)) { echo "Nome campo:<b>".$campos->name."</b> Tipo:<b>".$campos->type."</b><br>\n" } O nome da tabela é: produtos Nome campo:produto Tipo:string Nome campo:preco Tipo:real mysql_fetch_lengths array mysql_fecth_lengths(int Resultado) Exibe um array com o tamanho de cada campo, retorna FALSE se ocorrer erro e o primeiro campo começa a partir de 0 (campo[0]) usando as funções mysql_fetch_array ou mysql_fetch_row. 24
O exemplo abaixo retorna o comprimento dos campos com a quantidade de caracteres. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armanzena um array com os nomes do campos $campos = mysql_fetch_row($resultado); # armazena o número de campos $NumeroCampos = mysql_num_fields($resultado); # armazena o comprimento dos campos $ComprimentoCampos = mysql_fetch_lengths($resultado); # exibe o número total de registros for($x=0; $x < $NumeroCampos; $x++) { echo "O comprimeto do $x campo é:<b>".$comprimentocampos[$x]."</b> caractere(s } O comprimeto do 0 campo é:1 caractere(s), e seu valor é:1 O comprimeto do 1 campo é:2 caractere(s), e seu valor é:cd 25
O comprimeto do 2 campo é:4 caractere(s), e seu valor é:4.99 mysql_field_name string mysql_field_name(int Resultado, int IndiceCampo) Retorna o nome do campo começando de zero 0 (campo[0]). Exibe o nome de todos os campos da tabela produtos # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena o número de campos $NumeroCampos = mysql_num_fields($resultado); # exibe os nomes dos campos 26
for($x=0; $x < $NumeroCampos; $x++) { echo "O nome do $x campo é: <b>".mysql_field_name($resultado,$x)."</b><br>\n"; } O nome do 0 campo é: codigo_produto O nome do 1 campo é: produto O nome do 2 campo é: preco mysql_field_seek int mysql_field_seek(mysql_field_name (int Resultado, int IndiceCampo)) Esta função Avança movendo o cursor de ponteiro de campo para o campo especificado começando de zero 0. (campo[0], campo[1]). 27
O exemplo abaixo avança o cursor para o campo 2 que está na coluna 2 como mostra o exemplo abaixo: Campo 1 Campo 2 Campo 3 CodigoProduto Produto Preco # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # move o cursor de ponteiro para o campo 2 mysql_field_seek($resultado,2) or die ("Não foi possivel ir até a campo 2"); # armazena os campos $campo = mysql_fetch_field($resultado); # exibe o nome o campo echo "O cursor de ponteiro foi movido para o campo:<b>". $campo->name."</b><br O cursor de ponteiro foi movido para o campo:preco 28
mysql_field_type string mysql_field_type(int Resultado, int IndiceCampo) Retorna o tipo de campo de uma tabela começando com zero 0 (campo[0], campo[1]). O exemplo abaixo retorna o tipo de cada campo da tabela, onde é utilizado um loop com for para exibir os tipos dos campos. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena o número de campos $NumeroCampos = mysql_num_fields($resultado); # exibe o tipo dos campos 29
for($x=0; $x < $NumeroCampos; $x++) { echo "O tipo do $x campo é:<b>". mysql_field_type($resultado,$x)."</b> } O tipo do 0 campo é:int O tipo do 1 campo é:string O tipo do 2 campo é:real mysql_field_table string mysql_field_seek(int Resultado, int IndiceCampo) Retorna o nome da tabela de um campo especifico, em um relacionamento de tabelas retorna o nome de diferentes tabelas de cada campo. 30
O exemplo abaixo retorna o nome da tabela do primeiro (0) e segundo campo (1). É possível utilizar também um loop com for ou para os campos. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); echo "O nome da tabela do primeiro campo é:<b>". mysql_field_table($resultado, echo "O nome da tabela do segundo campo é:<b>". mysql_field_table($resultado,1 O nome da tabela do primeiro campo é:produtos O nome da tabela do segundo campo é:produtos 31
mysql_field_flags string mysql_field_flags(int Resultado, int IndiceCampo) Retorna o indicador de tipos do campo de uma tabela separados por espaço começando com zero 0 (campo[0], campo[1]). Os seguintes indicadores de tipos de campo podem ser retornados: auto_increment, primary_key, unique_key, multiple_key, binary, blob, enum, not null, timestamp, unsigned e zerofill. O exemplo abaixo retorna os indicadores de tipos de campos dos campos CodigoProduto, Produto e Preco. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena o número de campos $NumeroCampos = mysql_num_fields($resultado); # exibe o tipo dos campos for($x=0; $x < $NumeroCampos; $x++) 32
{ echo "O tipo de indicador do campo $x é:<b>". mysql_field_flags($resul } O tipo de flag do campo 0 é:not_null primary_key auto_increment O tipo de flag do campo 1 é:not_null O tipo de flag do campo 2 é:not_null mysql_field_len int mysql_field_len(int Resultado, int IndiceCampo) Retorna o tamanho de um campo de uma tabela começando com zero 0 (campo[0], campo[1]). 33
O exemplo abaixo retorna o tamanho dos campos. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena o número de campos $NumeroCampos = mysql_num_fields($resultado); # exibe o tipo dos campos for($x=0; $x < $NumeroCampos; $x++) { echo "O tamanho do campo $x é:<b>". mysql_field_len($resultado,$x)."</ } O tamanho do campo 0 é:11 O tamanho do campo 1 é:35 O tamanho do campo 2 é:12 mysql_list_fields 34
int mysql_list_field(string Banco, string Tabela, int Identificador) Retorna informações dos campos de uma tabela no banco de dados como: nome, tipo, tamanho, indicadores de tipo. Para retornar as informações sobre os campos, use as funções mostradas anteriormente mysql_field_name, mysql_field_type, mysql_field_len, mysql_field_flags. O exemplo abaixo retorna o nome, tipo, tamanho e identificador de tipos do campos. # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # armazena as informações dos campos $resultado = mysql_list_fields("teste","produtos",$conexao); # armazena o número de campos $NumeroCampos = mysql_num_fields($resultado); # exibe o tipo dos campos for($x=0; $x < $NumeroCampos; $x++) { echo "O nome do campo $x é:<b>". mysql_field_name($resultado,$x)."</b> 35
echo "O tipo do campo $x é:<b>". mysql_field_type($resultado,$x)."</b> echo "O tamanho do campo $x é:<b>". mysql_field_len($resultado,$x)."</ echo "O identificador de tipo do campo $x é:<b>". mysql_field_flags($r echo "<hr>"; } O nome do campo 0 é:codigo_produto O tipo do campo 0 é:int O tamanho do campo 0 é:11 O identificador de tipo do campo 0 é:not_null primary_key auto_increment O nome do campo 1 é:produto O tipo do campo 1 é:string O tamanho do campo 1 é:35 O identificador de tipo do campo 1 é:not_null O nome do campo 2 é:preco O tipo do campo 2 é:real O tamanho do campo 2 é:12 O identificador de tipo do campo 2 é:not_null mysql_free_result 36
int mysql_free_result(int Resultado) Esta função libera memória usada na execução de uma string SQL sendo que somente deve ser usada se estiver o script for consumir muita memória. Após a execução de um script toda a memória é liberada de forma automática quando finaliza o script. O exemplo abaixo libera a memória usada pela string SQL # seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos"; # armazena as informações dos campos $resultado = mysql_query($consulta,$conexao); while($campos = mysql_fetch_array($resultado)) { echo "Codigo Produto: <b>". $campos["codigo_produto"]."</b><br>\n"; echo "Produto: <b>". $campos["produto"]."</b><br>\n"; echo "Preco: <b>". $campos["preco"]."</b><br>\n"; } # libera a memória usada pela string SQL da consulta SELECT mysql_free_result($resultado); 37
Codigo Produto: 1 Produto: CD Preco: 4.99 mysql_insert_id int mysql_free_result(int Identificador) Retorna o número ID da última string SQL INSERT em um campo auto numerável (AUTO_INCREMET). 38
O exemplo abaixo insere uma linha de registro na tabela produtos com os dados do produto DVD e preço 9.90 e retorna o último registro na tabela no campo codigo_produto auto numerável com AUTO_INCREMENT. # seleciona o banco # seleciona a tabela produtos $consulta = "INSERT INTO produtos(produto,preco)values('dvd',9.90)"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); echo "O valor do último registro é: <b>". mysql_insert_id($conexao)."</b><br>\n O valor do último registro é: 2 Inserindo dados (INSERT) 39
O exemplo abaixo insere uma linha de registro na tabela produtos como o produto Livro e preço 35,00. # seleciona o banco # seleciona a tabela produtos $consulta = "INSERT INTO produtos(produto,preco)values('livro',35.00)"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); echo "Dados enviados com sucesso!!! </b><br>\n"; Dados enviados com sucesso!!! Atualizando dados (UPDATE) O exemplo abaixo atualiza o preço do campo produto da tabela produtos para 1.99 onde o campo for igual a CD. 40
# seleciona o banco # seleciona a tabela produtos $consulta = "UPDATE produtos set preco=1.99 WHERE produto='cd'"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); echo "Dados atualizados com sucesso!!! </b><br>\n"; Dados atualizados com sucesso!!! Selecionando dados (SELECT) O exemplo abaixo seleciona o campo produto da tabela produtos onde o campo for igual a CD. 41
# seleciona o banco # seleciona a tabela produtos $consulta = "SELECT * FROM produtos WHERE produto='cd'"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); # armazena os campos em uma array $campos = mysql_fetch_object($resultado); # exibe o valor do campo echo "CD: <b>".$campos->produto."</b> Preço: <b>".$campos->preco."</b><br>\n"; CD: CD Preço: 1.99 Excluindo dados (DELETE) O exemplo abaixo exclui o campo produto da tabela produtos onde o campo for igual a CD. # seleciona o banco 42
# seleciona a tabela produtos $consulta = "DELETE FROM produtos WHERE produto='cd'"; # executa a string SQL $resultado = mysql_query($consulta,$conexao); echo "Dados excluidos com sucesso!!!</b><br>\n"; Dados excluidos com sucesso!!! 43