A maior rede de estudos do Brasil

Grátis
475 pág.
LIVRO Aplicativos em PHP

Pré-visualização | Página 27 de 50

varchar(11) not null
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP
Aplicativos em PHP (WikiBooks - democratizando o conhecimento) - Página 161/475
) ENGINE=INNODB;
create table pedido(
 numero int not null primary key auto_increment, 
 codigocliente int not null references cliente(codigo), 
 valortotal real(7,2) DEFAULT '0.00' NOT NULL
) ENGINE=INNODB;
create table item(
 numeropedido int not null references pedido(numero), 
 codigoproduto int not null references produto(codigo), 
 quantidade int not null, 
 primary key(numeropedido, codigoproduto)
) ENGINE=INNODB;
CREATE TABLE product (
 category INT NOT NULL, 
 id INT NOT NULL,
 price DECIMAL,
 PRIMARY KEY(category, id)
) ENGINE=INNODB;
CREATE TABLE product_order (
 no INT NOT NULL AUTO_INCREMENT,
 product_category INT NOT NULL,
 product_id INT NOT NULL,
 customer_id INT NOT NULL,
 PRIMARY KEY(no),
 INDEX (product_category, product_id),
 FOREIGN KEY (product_category, product_id)
 REFERENCES product(category, id) ON UPDATE CASCADE ON DELETE RESTRICT,
 INDEX (customer_id),
 FOREIGN KEY (customer_id)
 REFERENCES customer(id)
) ENGINE=INNODB;
O tipo InnoDb dá suporte à constraint Foreign Key (references).
Usando o MySQL
1) mysql -u root -p ou mysql -u root
mysql -h host -u user -p banco
Obs: Caso receba a mensagem: Can't connect to MySQL server on 'localhost'
Falta startar o MySQL
2) create database nomebanco;
3) use nomebanco;
4) create table nometabela(campos tipos...);
5) select * from nometabela;
6) show databases;
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP
Aplicativos em PHP (WikiBooks - democratizando o conhecimento) - Página 162/475
7) show tables;
8) describe nometabela;
Importação e Exportação de Dados e Extrutura
Exportando:
bin\mysqldump -u user -p passwd banco > banco.sql
Importando:
bin\mysql -u user -p password banco < banco.sql
IMPORTAR Todos os Bancos de um Script
Temos um script contendo diversos bancos então:
mysql -u root < varios_bancos.sql
Mudar Conjunto de Caracters para LATIN1
musql -u root
\C latin1
Importação e Exportação com o phpMyAdmin
Exportar todo um banco
- Abrir o phpMyAdmin e selecionar o banco
- Clicar no botão Exportar
- Basta rolar a tela e clicar em Executar abaixo
- O conteúdo será exibido na tela. Devemos então selecionar e criar um arquivo texto com o 
mesmo. Por convenção criamos arquivos com a extensão .sql.
- Também podemos exportar para um arquivo compactado. Basta clicar na opção "Compactado com 
zip ou gzip.
- Existem muitas outras opções para a exportação.
Caso queira exportar somente uma tabela o processo é o mesmo, mudando apenas que devemos 
selecionar apenas a tabela desejada.
Populando Tabelas após a criação
O comando LOAD DATA pode ser utilizado para popular tabelas, trazendo de arquivos:
LOAD DATA LOCAL INFILE '/path/arquivo.txt' INTO TABLE nometabela;
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP
Aplicativos em PHP (WikiBooks - democratizando o conhecimento) - Página 163/475
SELECT DATABASE();
SHOW CHARACTER SET;
Importar CSV no MySQL
$handle = fopen ('./file.csv', 'r');
 while (($data = fgetcsv($handle, 1000, ',', '"')) !== FALSE)
 {
 $query = "INSERT INTO services VALUES ('". 
implode("','", $data)."')";
 $query = @mysql_query($query);
 }
LOAD DATA INFILE "./ImportData.csv"
 INTO TABLE table1
 FIELDS TERMINATED BY ","
 OPTIONALLY ENCLOSED BY """"
 LINES TERMINATED BY "\r\n";
OPTIONALLY ENCLOSED is optional.
Funções com Datas
DATE_SUB
SELECT something FROM tbl_name WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= 
date_col;
SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
DATE_ADD
SELECT DATE_ADD('2006-05-00',INTERVAL 1 DAY);
SELECT CURDATE();
SELECT CURTIME();
DATE_FORMAT
SELECT date_format( '2006-04-30', '%d/%m/%Y' ); -- 30/04/2006
SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR')); -- 03.10.2003
SELECT DATE_FORMAT('2006-06-00', '%d/%m/%Y');
SELECT NOW();
SELECT TO_DAYS('1997-10-07'); -- RETORNA DIAS
SELECT YEAR('2000-01-01');
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP
Aplicativos em PHP (WikiBooks - democratizando o conhecimento) - Página 164/475
Ativando o suporte a INNODB no MySQL do XAMPP
Editar o arquivo my.cnf:
D:\_xampplite\mysql\bin\my.cnf
Caso apareça um arquivo "my" sem extensão clique com o botão direito, enviar para e abra num 
editor de texto e faça as seguintes alterações:
...
#skip-innodb 
# Uncomment the following if you are using InnoDB tables 
innodb_data_home_dir = D:/_xampplite/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend 
innodb_log_group_home_dir = D:/_xampplite/mysql/data/
innodb_log_arch_dir = D:/_xampplite/mysql/data/
# You can set .._buffer_pool_size up to 50 - 80 % 
# of RAM but beware of setting memory usage too high 
set-variable = innodb_buffer_pool_size=16M 
set-variable = innodb_additional_mem_pool_size=2M 
# Set .._log_file_size to 25 % of buffer pool size 
set-variable = innodb_log_file_size=5M 
set-variable = innodb_log_buffer_size=8M 
innodb_flush_log_at_trx_commit=1 
set-variable = innodb_lock_wait_timeout=50 
...
Pronto, agora você pode criar tabelas com suporte a INNODB (relacionamentos).
Conversão de Funções do MySQL para o PostgreSQL no PHP
Na conversão de scripts em PHP com MySQL para PHP com PostgreSQL temos que atendar para 
vários detalhes: nomes das funções (ex.: mysql_connect para pg_connect), sintaxe das funções, que 
varia em muitas delas (veremos adiante), estrutura do banco: tipos de tabelas, tipos de dados, auto-
incremento, etc. Óbvio que para converter entre dois SGBDs devemos conhecer as características 
de ambos. Exemplo: como vou usar um tipo de dados do MySQL no PostgreSQL, se este não tem o 
referido tipo? Deverei encontrar no PostgreSQL, um tipo que satisfaça os requisitos daquele do 
MySQL (para isso precisarei conhecer as características dos tipos de ambos, suas faixas de valores, 
tipos de dados, etc).
Alguns Exemplos de Conversão de Funções. Não vou me preocupar com tratamento de erros nem 
com outros detalhes, mostrarei apenas as funções para comparar:
Conexão ao Banco de Dados
No MySQL:
Abrir a conexão:
$con_my = mysql_connect("localhost:porta", "usuario", "senha");
Quando for usar, selecionar o banco:
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP
Aplicativos em PHP (WikiBooks - democratizando o conhecimento) - Página 165/475
mysql_select_db('nomebanco', $con_my);
No PostgreSQL:
Etapa única:
$con_pg = pg_connect("host=127.0.0.1 port=5432 dbname=banco user=usuario password=senha");
Obs.: na conexão já se seleciona o banco a ser usado.
Consultas
MySQL:
$q = mysql_query(“SELECT * FROM tabela”, $con_my);
PostgreSQL:
$q = pg_query($con_pg, “SELECT * FROM tabela”);
Obs.: Veja que a ordem dos parâmetros é invertida.
LIMIT
Aqui temos uma boa diferença entre ambos.
Quando for a forma resumida não há diferença entre ambos. Por exemplo:
SELECT * FROM tabela ORDER BY campo LIMIT 5;
Obs.: Altamente recomendado usar ORDER BY antes de LIMIT, para um retorno coerente e o 
campo do ORDER BY deve ser o campo chave primparia.
Quando o LIMIT trouxer os dois parâmetros então teremos diferença.
Sintaxe no PostgreSQL:
SELECT lista_de_campos FROM expressão [LIMIT { número | ALL }] [OFFSET inicio]
LIMIT ALL – mesmo que omitir LIMIT.
OFFSET inicio – orienta para que a consulta retorne somente a partir de inicio.
OFFSET 0 – mesmo que omitir OFFSET.
LIMIT 50 OFFSET 11 – Deverá trazer 50 registros do 12 até o 50, caso existam.
Exemplos:
SELECT * FROM cliente ORDER BY codigo LIMIT 2 OFFSET 0;
Irá retornar os registros do 1 e 2.
http://pt.wikibooks.org/wiki/Aplicativos_em_PHP
Aplicativos em PHP (WikiBooks - democratizando o conhecimento) - Página 166/475
SELECT * FROM cliente ORDER BY codigo LIMIT 2 OFFSET 1;
Irá retornar os registros do 2 e 3.
SELECT * FROM