Manipulando o banco de dados MySQL utilizando PHP
Utilizando banco de dados MySQL com PHP.
Olá, neste artigo irei demonstrar brevemente como utilizar o banco de dados MySQL com PHP.
Também irei dar uma breve explicação sobre SQL, na qual você deverá se aprofundar melhor.
Só para deixar claro, irei utilizar o gerenciador fornecido pelo MySQL, o MySQL Workbench, que está na versão 5.2.34 quando escrevo este post.
Download do Mysql e do MySQL workbench podem ser realizados na página http://www.mysql.com/downloads/.
Vamos lá.
O que é banco de dados
Banco de dados (ou base de dados), é um conjunto de registros dispostos em estrutura regular que possibilita a reorganização dos mesmos e produção de informação.
Um banco de dados normalmente agrupa registros utilizáveis para um mesmo fim.
Um banco de dados é usualmente mantido e acessado por meio de um software conhecido como Sistema Gerenciador de Banco de Dados (SGBD).
Normalmente um SGBD adota um modelo de dados, de forma pura, reduzida ou estendida. Muitas vezes o termo banco de dados é usado, de forma errônea, como sinônimo de SGBD.
O modelo de dados mais adotado hoje em dia é o modelo relacional, onde as estruturas têm a forma de tabelas, compostas por tuplas (linhas) e colunas.
Fonte: Wikipedia.
O que é SQL
Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das características originais do SQL foram inspiradas na álgebra relacional.
Fonte: Wikipedia.
Comandos SQL
Comandos SQL tentam seguir um padrão, ANSI e ISO, porém algumas empresas costumar colocar alguns códigos próprios em seus gerenciadores, para otimização interna, etc.
Os comandos mais utilizados, e que vamos ver aqui, são os comandos para CRUD.
* CREATE – Comando Reponsável por criar uma tabela ou banco de dados, etc.
* INSERT – Comando Reponsável por inserir dados na tabela.
* SELECT – Comando responsável por buscar dados na tabela.
* UPDATE – Comando responsável por atualizar os dados de uma tabela.
* DELETE – Comando responsável por remover determinado dado (ou todos
) de uma tabela.
* TRUNCATE – Comando responsável por LIMPAR uma tabela. Até as chaves de auto incremento voltam ao início.
Exemplos
Alguns exemplos de uso. Como base, iremos tomar como base um sistema básico de usuários com hierarquia.
Um usuário tem os atributos id (único e auto incremento), nome, login, senha e classe.
Para id utilizaremos o tipo int.
Para nome, login e senha utilizaremos varchar.
E para classe também utilizaremos int.
Porque usar int na classe ao invés de utilizar varchar? Bom, isso é simples. Imagina que nós armazenamos a classe num atributo de texto, e temos 10000 usuários da classe usuário.
Beleza, até ai sem problema. Mas agora não queremos mais que a classe usuário se chame usuário e sim Users. Teríamos que mudar 10000 registros.
Com o relacionamento, simplesmente alterando a tabela relacionada e altera de todos, pois ele está relacionado com a ID (que não muda) do que com o nome da classe.
Bom, a nossa tabela de relacionamento irá armazenar apenas a ID e o nome da classe. Bem simples não?
Uma imagem de como irá ficar as tabelas e o relacionamento.

O código pra gerar essa tabela com o relacionamento eu postarei logo abaixo explicando-o.
CREATE SCHEMA IF NOT EXISTS `dados` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `dados` ;
-- -----------------------------------------------------
-- Table `dados`.`classes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `dados`.`classes` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR(45) NULL ,
PRIMARY KEY (`id`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `dados`.`usuarios`
-- -----------------------------------------------------
CREATE TABLE `dados`.`usuarios` (
`id` INT NOT NULL AUTO_INCREMENT ,
`nome` VARCHAR(45) NULL ,
`login` VARCHAR(45) NULL ,
`senha` VARCHAR(32) NULL ,
`classe` INT NULL ,
PRIMARY KEY (`id`) ,
INDEX `idx_classe` (`classe` ASC) ,
CONSTRAINT `idx_classe`
FOREIGN KEY (`classe` )
REFERENCES `dados`.`classes` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Bom, vamos lá, logo na primeira linha, vemos um CREATE SCHEMA `dados`, ou seja, vamos criar um esquema de dados chamado dados. Usualmente irei me referir a ele como nosso banco de dados.
USE `dados` quer dizer que todas as consultas posteriores serão aplicados a esse esquema.
CREATE TABLE IF NOT EXISTS `dados`.`classes` – Iremos criar uma tabela, apenas se não existir, chamada classes. Observe que utilizei `dados`.`classes`, que significa esquema e tabela.
Como utilizamos o USE anteriormente, isso é redundante, mas como estou utilizando o MySQL Workbench para criar as querys, ele gera isso sozinho.
Bom, fora o create, iremos definir os atributos dessa tabela classes, que são ID e NOME.
ID é do tipo INT (inteiro, integer), não pode ser nulo, ou seja, sempre terá um valor do tipo selecionado e é auto incrementado, ou seja, não precisamos definir qual a ID pois ela aumentará automáticamente a cada novo registro.
Definimos a chave primária como sendo a ID, ou seja, definimos que ela nunca irá se repetir, e ela será indexada, ou seja, a grosso modo dizendo, será mais rápido buscar por esse campo.
O atributo nome é do tipo VARCHAR, e não CHAR, ambos se referem a texto. A diferença de um para o outro você pode conferir neste link Os Tipos CHAR e VARCHAR
Os atributos da segunda tabela são muito parecidos, a única diferença que talvez você tenha notado, é que lá além da primary key, existem também INDEX, CONSTRAINT, FOREIGN KEY e REFERENCES.
Isso significa que estou criando outro índice, só que desta vez com uma “ligação”, “amarramento” (CONSTRAINT), que será nossa relação com a tabela classes
FOREIGN KEY é com qual tabela iremos relacionar com nossa “chave estrangeira” (FOREIGN KEY = Chave Estrangeira) e será referenciado o campo ID da tabela (REFERENCES (id)).
“ON DELETE NO ACTION” e “ON UPDATE NO ACTION” significa que ao deletar ou atualizar um registro com relacionamento, nada será feito. Geralmente realizar esta ação gera um erro de constraint.
Agora explicado como funciona o banco, vamos inserir alguns registros, utilizar os comandos anteriormente citados e logo após como utiliza-los em PHP.
Exemplo de Comando INSERT
O comando insert, serve para inserir dados. Existem vários jeitos de utilizar o comando, portante irei passar aqui apenas a sintaxe básica.
A sintaxe é a seguinte
INSERT INTO `nome_da_tabela` (campo1, campo2, campo3, campon) VALUES ('valor_campo1', 'valor_campo2', 'valor_campo3', 'valor_campon');
As aspas simples são necessárias quando se está utilizando Strings ou Datas, mas não são necessárias quando são números, e isso você verá quando formos inserir os dados dos usuários.
Observe o código de inserção de classes:
INSERT INTO `classes` (`nome`) VALUES ('Usuário');
O que ela faz é simplesmente pegar a tabela “classes” e inserir o valor “Usuário” no campo “nome”. Em nosso caso, é uma inserção simples, e não precisamos passar a ID, pois ela é gerada automaticamente.
Vamos inserir as classes restantes.
INSERT INTO `classes` (`nome`) VALUES ('Moderador');
INSERT INTO `classes` (`nome`) VALUES ('Super Moderador');
INSERT INTO `classes` (`nome`) VALUES ('Administrador');
INSERT INTO `classes` (`nome`) VALUES ('Programador');
E agora vamos inserir os usuários:
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Maria', 'maria', 'maria123', 1);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Hildeu', 'hildeu', '123bbbas', 1);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Jorge', 'jorge', 'vidaloka', 1);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Fernando', 'fernando', '1a2b3c', 2);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Felipe', 'felipe', 'harrypotter', 3);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Bruno', 'bruno', 'alessandra', 3);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Roberto', 'roberto', 'vanessa', 4);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Vinícius', 'vinicius', 'fuzzer', 4);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('William', 'william', '@de#AsnH$', 5);
Observe que o nome dos campos estão delimitados por crases e que nos valores, alguns são delimitados por aspas simples e outros nem são delimitados.
Isso foi explicado um pouco acima. rsrs.
O Comando SELECT
O comando SELECT é o responsável por realizarmos buscas em nosso banco de dados. A sintaxe básica é:
SELECT campo1, campo2, campo3 FROM nome_da_tabela WHERE condicao;
campo1, campo2, campo3 são os dados que eu quero pesquisar, eu poderia simplesmente mudar para * e retornar todos os campos. As vezes você quer dados mais específicos, outras vezes não, depende da sua necessidade.
nome_da_tabela acho que é meio auto-explicativo, mas é a tabela que você quer pesquisar. Temos apenas a tabela usuarios e classes em nosso projeto.
Acho importante ressaltar que poderíamos realizar a consulta em duas, três, N tabelas.
Por exemplo, iremos consultar o nome e classe dos todos os nossos usuarios:
SELECT nome, classe FROM usuarios;
E agora vamos buscar apenas os programadores, ou seja, vamos buscar em duas tabelas:
SELECT usuarios.nome, classes.nome as classe FROM usuarios, classes WHERE classes.nome = "Programador" AND usuarios.classe = classes.id;
Veja que não é um bixo de 7 cabeças, a query (consulta) no fundo tem um sentido lógico.
“WHERE condicao” pode ser omitido, então retornaria todos os elementos, mas caso estejamos pesquisando, por exemplo todos que sejam da classe Administrador ficaria “WHERE classe = 4″.
Aqui é uma parte importante, pois podemos buscar de várias formas, a mais comum é a WHERE campo = ‘valor’, porém também temos operadores como o LIKE, o IN, o NOT.
Para exemplos melhores, recomendo ler uma apostila especializada em SQL, porém não utilizaremos esses operadores neste artigo.
O Comando UPDATE
Este comando acho que não preciso encher de firula, ele simplesmente atualiza os dados da tabela.
Sua sintaxe é:
UPDATE nome_tabela SET nome_campo = 'novo_valor' WHERE condicao;
Esse comando é meio que auto explicativo, mas vamos a algumas observações:
1 – Podemos atualizar mais de um campo ao mesmo tempo, nesse caso apenas separaríamos por uma vírgula (,) e colocaríamos outro_campo = ‘outro_valor’.
2 – Se não for utilizada a condição, você irá alterar os campos de todos os registros, isso é meio problemático rs. A não ser que você queira realmente fazer isso, como desativar todos os usuários, resetar todas as senhas, não sei rsrsrs.
Um exemplo para alterar a senha do usuário william:
UPDATE usuarios SET senha='123mudarasenha' WHERE login = 'william';
O comando DELETE
O comando DELETE serve simplesmente para remover, apagar, deletar, dar cabo (como preferir chamar, rsrs) em um determinado dado de uma determinada tabela, ou todos os dados de uma tabela, caso utilizado sem o WHERE.
Sua sintaxe básica é:
DELETE FROM nome_da_tabela WHERE condicao;
Como você já deve ter imaginado, se eu executar este comando sem passar a condição WHERE irei sumir com todos os dados dessa tabela. No Workbench por padrão é bloqueado UPDATE e DELETE sem a clausula WHERE, mas pode ser desativado, mas isso não é regra.
O comando TRUNCATE
O comando TRUNCATE tem por finalidade limpar todos os dados de uma tabela, ou seja, além de eliminar todos os registros, ele reinicia a numeração de auto incremento.
Sua sintaxe é:
TRUNCATE TABLE nome_da_tabela;
Bom, finalizado essa simplória parte sobre SQL, vamos agora como manipular isso em PHP.
Brincando de MySQL com PHP
Bom, agora vamos a parte que interessa. O que iremos fazer? Bom, não temos muita coisa no banco de dados, apenas duas tabelas.
Então, vamos realizar um simples sistema de gerenciamento, não iremos utilizar os dados de login nem nada, são apenas para “enfeite”, até porque, já tenho um post sobre sistemas de login
Bom, iremos divir o artigo em partes:
1 – Criando o arquivo de conexão
2 – Listagem de todos os usuários;
3 – Edição de usuário;
4 – Inserir novos usuários;
5 – Deletar usuários;
6 – Listagem de todas as classes;
7 – Edição de classes;
8 – Inserir novas classes;
9 – Deletar classes;
Criando o arquivo de conexão
O arquivo de conexão será responsável por, deerr, fazer a conexão. Ele deverá ser incluído em todas as páginas.
A função para conectar ao mysql é a mysql_connect.
Nossa página ficará da seguinte forma:
/* ---------- ARQUIVO DE CONEXÃO COM O BANCO DE DADOS MYSQL ---------- */
/**
* Constante de login do servidor de dados mysql
*/
define("DB_LOGIN", "root");
/**
* Constante da senha do servidor de dados mysql
*/
define("DB_SENHA", "123456");
/**
* Endereço do servidor de dados mysql
*/
define("DB_LOCAL", "127.0.0.1");
/**
* Banco de dados que iremos utilizar no servidor de dados conectado
*/
define("DB_BANCO", "site-local");
/**
* Conectamos e armazenamos o link de conexão
*/
$link = mysql_connect(DB_LOCAL, DB_LOGIN, DB_SENHA) or die("Não foi possível conectar com o servidor de dados.");;
/**
* Selecionamos agora o banco de dados
*/
mysql_select_db(DB_BANCO, $link) or die("Não foi possível selecionar o banco no servidor especificado.");
/**
* Definimos a codificação do banco como UTF-8, para evitar problemas com encoding
*/
mysql_set_charset("utf8", $link);
Esse arquivo será o responsável por conectar e não precisará sofrer mais nenhuma alteração.
Só lembrando que ele deverá ser incluído em todas as páginas que forem utilizar banco de dados.
Listagem de todos os usuários
Bom, para nossa listagem de usuários, não irei me focar em orientação a objetos, nem frameworks. Não utilizarei PDO, pois pretendo tentar passar a função nativa do mysql para PHP além de que, pretendo escrever posteriormente um artigo sobre PDO, na qual vocês poderão testar qual vocês acham melhor.
Para nossa listagem de usuários, iremos precisar de uma tabela, realizar a consulta, um loop para preencher os dados, nada muito complicado.
Nossa página ficaria mais ou menos semelhante a abaixo comentada:
<?php
require_once("conexao.php");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Listagem de usuários</title>
</head>
<body>
<!-- CRIAMOS UMA TABELA PARA A LISTAGEM DE USUÁRIOS -->
<table>
<tr>
<td>ID</td>
<td>Nome</td>
<td>Login</td>
<td>Senha</td>
<td>Classe</td>
<td>Ações</td>
</tr>
<?php
//Crio a SQL de consulta
$qry = "SELECT u.id, u.nome, u.login, u.senha, c.nome as classe
FROM usuarios u
INNER JOIN classes c ON c.id = u.classe
ORDER BY u.nome ASC;";
//Executo a consulta
$exe_usuarios = mysql_query($qry);
//agora faço um while de todos os resultados para preencher a tabela
while($row = mysql_fetch_array($exe_usuarios)){
?>
<tr>
<td><?php echo $row["id"]; ?></td>
<td><?php echo $row["nome"]; ?></td>
<td><?php echo $row["login"]; ?></td>
<td><?php echo $row["senha"]; ?></td>
<td><?php echo $row["classe"]; ?></td>
<td>
<a href="editar_usuario.php?id=<?php echo $row["id"]; ?>">Editar</a>
<a href="deletar_usuario.php?id=<?php echo $row["id"]; ?>">Deletar</a>
</td>
</tr>
<?php
}
?>
</table>
<!-- FIM DA TABELA -->
</body>
</html>
Edição de usuário
Observe que na tabela anterior, nas ações de editar e deletar, foi passado junto ao link a ID, pois iremos tratar lá qual usuários iremos alterar.
Para tanto, precisaremos de realizar uma conexão com o banco e rodar uma Query (Consulta) de atualização (UPDATE). Os dados irão vir de um formulário HTML.
Segue o código comentado:
<?php
require_once("conexao.php");
//pego a ID da url
$id = (int) 0 + $_GET["id"];
//verifico se a ID ainda é numérica, pois caso não seja pode ser
//uma tentativa de SQL Injection
if (!is_numeric($id)) {
die("Tentativa de SQL Injection.");
}
//verifico se clicaram no botão atualizar, ou seja, foi feito um POST
if (getenv("REQUEST_METHOD") == "POST") {
//irei utilizar um método mais manual para evitar sql inject
//Levaremos em consideração que alguns caracteres não devem ser
//cadastrados no banco, vamos criar um array para isto
$invalidos = (array) array("'", "\"", ";", "--");
//verificamos se no POST não tem nenhum desses dados em nenhum dos campos
foreach ($_POST as $valor) {
foreach ($invalidos as $invalido) {
if(strpos($valor, $invalido) !== false){
die("Tentativa de SQL Inject. Não utilize nenhum desses caracteres: <strong>" . implode(" ", $invalidos) . "</strong>");
}
}
}
//se chegou aqui, os dados foram validados, agora faço a consulta de atualizar no banco
$qry_atualizacao = "UPDATE usuarios SET nome = '{$_POST["nome"]}', login = '{$_POST["login"]}', senha = '{$_POST["senha"]}', classe = {$_POST["classe"]} WHERE id = {$id};";
//apenas executo a query
if(mysql_query($qry_atualizacao)){
$status_atualizacao = "Usuário atualizado com sucesso.";
}else{
$status_atualizacao = "O cadastro não foi atualizado. Informe o administrador do sistema sobre este erro e como fez para chegar até ele.";
}
}
//caso contrário, faço a consulta no banco normalmente e exibo os dados
//em um formulário HTML
//Crio a string da query, observe que não estou juntando a tabela de classes
//pois desta vez me interessa o número e não o nome
$qry_usuario = "SELECT * FROM usuarios WHERE id = {$id};";
$exe_usuarios = mysql_query($qry_usuario);
//verifico se houve 1 e apenas um usuário, caso isso não seja verdade, gero um erro
if (mysql_num_rows($exe_usuarios) != 1) {
die("Erro ao consultar. Itens retornado: " . mysql_num_rows($exe_usuarios) . ". Deve ser apenas 1.");
}
//se cheguei aqui, está tudo ok, agora faço a form e
$usuario = mysql_fetch_array($exe_usuarios, MYSQL_ASSOC);
//agora eu busco todas as classes, vou fazer um combo box para que possa editar a classe também
$qry_classes = "SELECT * FROM classes ORDER BY nome ASC;";
$exe_classes = mysql_query($qry_classes);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Listagem de usuários</title>
</head>
<body>
<!-- VERIFICO SE EXISTE UMA VARIAVEL CHAMADA ATUALIZADO E EXIBO A MENSAGEM -->
<?php if(isset($status_atualizacao)): echo $status_atualizacao; endif; ?>
<!-- AQUI CRIAREMOS UMA TABELA E UM FORM COM OS DADOS DO USUÁRIO JÁ PREENCHIDOS -->
<!-- é importante que o método seja o post -->
<!-- o action é em para qual página passaremos os dados, será para ela mesmo -->
<form name="frmEdicao" method="post" action="editar_usuario.php?id=<?php echo $id; ?>">
<table>
<tr>
<td>Nome:</td>
<td><input name="nome" type="text" value="<?php echo $usuario["nome"]; ?>" size="25" /></td>
</tr>
<tr>
<td>Login:</td>
<td><input name="login" type="text" value="<?php echo $usuario["login"]; ?>" size="25" /></td>
</tr>
<tr>
<td>Senha:</td>
<td><input name="senha" type="text" value="<?php echo $usuario["senha"]; ?>" size="25" /></td>
</tr>
<tr>
<td>Classe:</td>
<td>
<!-- FAÇO UM WHILE DE TODAS AS CLASSES -->
<select name="classe">
<?php
while($classe = mysql_fetch_array($exe_classes)){
?>
<option <?php if($usuario["classe"] == $classe["id"]): ?>selected="selected"<?php endif; ?> value="<?php echo $classe["id"]; ?>"><?php echo $classe["nome"]; ?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Alterar dados" /></td>
</tr>
</table>
</form>
<!-- FIM DA TABELA E DO FORM -->
</body>
</html>
Inserir novos usuários
Bom, e lá vamos nós. Nesta parte de inserir usuários, vamos aproveitar a mesma estrutura da página de edição, com algumas pequenas alterações, como por exemplo, os dados não virão preenchidos.
Atenção apenas a parte de inserção, que antes era a de alteração.
Para tal, antes de começarmos a codificar a página de inserção, insira um link na index.php para a página de cadastro. Cole o código abaixo antes da TAG
Muito bom, excelente post muito claro e bem explicado, muito obrigado me ajudou muito … meus parabéns.
oi amigo gostei muito da esplicaçao, estou com um problema?tenho um pragama que toda vez que eu troco a placa mae ele emite um codigo o ultimo foi esse (5F30CA) codigo de liberaçao esse e o codigo de ativaçao(97081467A6F9009F860F69536512AF87) sera que vc pode mim ajudar com um gerado desse codigo ! abraço obrigado.
Amigo, veja se pode me ajudar, preciso listar a relação de clientes junto com seus respectivos hobbies, neste modelo de tabela relacional, como faço o select disso?
SET FOREIGN_KEY_CHECKS=0;
SET SQL_MODE=”NO_AUTO_VALUE_ON_ZERO”;
DROP TABLE IF EXISTS cliente;
CREATE TABLE IF NOT EXISTS cliente (
idcliente int(11) NOT NULL auto_increment,
nmcliente varchar(100) NOT NULL,
dtnascimento date NOT NULL,
dcendereco varchar(200) NOT NULL,
enestadocivil enum(‘J’,'C’,'S’,'V’,'D’) NOT NULL,
ensexo enum(‘F’,'M’) NOT NULL,
txcomentario text,
dtcadastro date NOT NULL,
PRIMARY KEY (idcliente)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
DROP TABLE IF EXISTS hoobies;
CREATE TABLE IF NOT EXISTS hoobies (
idhoobies int(11) NOT NULL auto_increment,
nmhoobies varchar(50) NOT NULL,
PRIMARY KEY (idhoobies)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
DROP TABLE IF EXISTS hoobies_cliente;
CREATE TABLE IF NOT EXISTS hoobies_cliente (
idhoobies int(11) NOT NULL,
idcliente int(11) NOT NULL,
PRIMARY KEY (idhoobies,idcliente),
KEY fk_hoobies_has_cliente_cliente1 (idcliente)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE hoobies_cliente
ADD CONSTRAINT fk_hoobies_has_cliente_cliente1 FOREIGN KEY (idcliente) REFERENCES cliente (idcliente) ON DELETE NO ACTION ON UPDATE NO ACTION,
ADD CONSTRAINT fk_hoobies_has_cliente_hoobies1 FOREIGN KEY (idhoobies) REFERENCES hoobies (idhoobies) ON DELETE NO ACTION ON UPDATE NO ACTION;
SET FOREIGN_KEY_CHECKS=1;
tem como vc fazer um gerado de key pra mim?
Você parece mesmo se importar com programadores que necessitam de ajuda para iniciar no PHP!
Eu tenho 22 anos em programação desktop, uso há tempos harbour, no entanto faz-se urgente que conheçamos tecnologias para Web. Sempre ouvi bem do PHP, no entanto, falta ainda uma explicação de como usa-lo…explico:
1) uma linguagem qualquer se instala dentro do meu HD pessoal, e com ela eu desenvolvo o que o cliente precisa (cliente fisico..rs), e depois eu instalo o já compilado sistema em seus micros
2) no PHP, eu posso ter um editor talvez(não curto, gosto das coisas na unha, porém..iniciante)
3) onde fica e como eu acesso o PHP, crio BD´s, edito…etc
4) porque cada vez que eu tenho de acessar uma pagina na web eu preciso toda hora entrar com a senha do BD? falo isso a nivel de usuario e não de administrador
5) quais e onde eu posso baixar tudo sobre PHP (além do que vc postou aqui) falo das ferramentas necessárias
um abraço,e sei que não vai responder, mesmo assim, obrigado pelo espaço
Ajudou muito.Parabéns!
Olá gabi, muito obrigado pelo feedback. Fico feliz em saber que pude ajudar alguém com meu blog =]