Lição 19: Inserindo dados em um Banco de Dados

Nesta lição veremos como inserir dados em um Banco de Dados com uso de scripts PHP.

Inserir dados com SQL

Para inserir dados em um Banco de Dados com SQL a sintaxe é idêntica a usada para criar Banco de Dados. A sintaxe é mostrada a seguir:


	INSERT INTO nome_da_Tabela(coluna1, coluna2, ...) VALUES(valor1, valor2, ...) 
	
	

Notar que podemos manipular dados em várias colunas ao mesmo tempo usando uma lista separada por vírgula no comando SQL. Mas, é óbvio, podemos manipular uma coluna somente. Colunas que não constam do comando SQL permanecem vazias.

Exemplo: Inserir dados de uma pessoa na Tabela

Neste exemplo usaremos o Banco de Dados criado na lição 18. Vamos inserir os dados de uma pessoa. Seja a pessoa Gus Goose cujo telefone é 99887766 e nasceu em 1964-04-20

O comando SQL para inserção é conforme mostrado a seguir:

	
	$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES('Gus','Goose','99887766 ','1964-04-20')"; 
mysql_query($strSQL) or die(mysql_error());

Notar que um comando SQL pode tornar-se extenso dificultando seu entendimento. Para esclarecer melhor e facilitar o entendimento existe uma sintaxe alternativa conforme mostrada a seguir:


	strSQL = "INSERT INTO people(";

	strSQL = strSQL . "FirstName, ";
	strSQL = strSQL . "LastName, "
	strSQL = strSQL . "Phone, ";
	strSQL = strSQL . "birth) ";

	strSQL = strSQL . "VALUES (";

	strSQL = strSQL . "'Gus', ";
	strSQL = strSQL . "'Goose', ";
	strSQL = strSQL . "'99887766', ";

	strSQL = strSQL . "'1964-04-20')";
	 
	mysql_query($strSQL) or die(mysql_error());
	
	

Segundo esta sintaxe, dividimos o comando em parte e usamos uma variável - no nosso caso $strSQL - para concatenar as partes em um comando único.

Na prática não importa a sintaxe que você usa. Dependendo do seu projeto escolha aquela que for mais conveniente para o claro entendimento dos comandos SQL.

Tente executar o seguinte código para inserir Gus Goose no Banco de Dados:


	<html>
	<head>
	<title>Inserindo dados em um Banco de Dados</title>
	</head>
	<body>
	<?php

	// Conexão com o Banco de Dados
	mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ());

	// Seleciona o Banco de Dados
	mysql_select_db("mydatabase") or die(mysql_error());

	// Comando SQL

	$strSQL = "INSERT INTO people(";

	$strSQL = $strSQL . "FirstName, ";
	$strSQL = $strSQL . "LastName, ";

	$strSQL = $strSQL . "Phone, ";
	$strSQL = $strSQL . "BirthDate) ";

	$strSQL = $strSQL . "VALUES(";

	$strSQL = $strSQL . "'Gus', ";

	$strSQL = $strSQL . "'Goose', ";
	$strSQL = $strSQL . "'99887766', ";

	$strSQL = $strSQL . "'1964-04-20')";

	// Comando SQL executado 
	mysql_query($strSQL) or die (mysql_error());

	// Encerra conexão
	mysql_close();
	?>

	<h1>Banco de Dados atualizado!</h1>
	</body>
	</html>
	
	

Inserir uma entrada de usuário no Banco de Dados

Em certos casos há necessidade de inserir uma entrada de usuário no Banco de Dados.

Como você já deve ter concluído isto será feito com uso de um formulário como descrito na lição 11 - pois podemos inserir o valor passado pelo formulário em um comando SQL. Suponha o formulário conforme mostrado a seguir:


	<form action="insert.php" method="post">
	<input type="text" name="FirstName" />
	<input type="submit" value="Save" />

	</form>
	
	

O formulário será enviado para insert.php no qual, conforme mostrado na lição 11, extrairemos o valor entrado no formulário pelo usuário. Para este nosso exemplo o comando SQL é conforme mostrado a seguir:


	strSQL = "INSERT INTO people(FirstName) values('" . $_POST["FirstName"] . "')"
	
	

De maneira semelhante é possível extrair dados de cookies, sessions, query strings, etc.

Erros mais comuns

No início, você provavelmente será brindado com uma bateria de mensagens de erros quando tentar atualizar dados em um Banco de Dados. Não há lugar para o menor erro que seja, quando trabalhamos com Banco de Dados. O simples esquecimento ou má colocação de uma vírgula põe tudo a perder e lá vem uma mensagem de erro. Observe a seguir os erros mais comuns cometidos quando se está iniciando.

Tipo de dado incorreto

É importante manter consistência de tipo de dado na coluna. Cada coluna deve conter um determinado tipo de dado. A figura a seguir mostra os tipos de dados para a Tabela "people" do nosso exemplo.

Specifying data types

Se você tentar inserir textos ou números em um mesmo campo que admite somente textos, vai ocorrer erro. Ou bem texto ou bem número. É importante definir o tipo de dados da forma mais precisa possível.

Observe, a seguir, uma lista dos tipos de dados:

Tipo de dado Definição Tamanho
CHR
Texto ou combinação de texto e número. Pode-se também ser empregado para números não usados em cálculos (por exemplo: número de telefone). Até 255 caracteres - ou o comprimento definido em "Length"
TEXT
Textos longos ou combinação de textos e números. Até 65.535 caracteres.
INT
Dados numéricos para cálculos matemáticos. 4 bytes.
DATE
Datas no formato YYYY-MM-DD 3 bytes.
TIME
Horas no formato hh:mm:ss 3 bytes.
DATETIME
Data/hora no formato YYYY-MM-DD hh:mm:ss 8 bytes.

Comandos SQL com aspas e barras

Se, em um comando SQL, você tentar inserir texto contendo aspas simples ('), aspas duplas (") ou barra invertida (\), o registro não será inserido. A solução é usar barra invertida (\) antes destes caracteres nos comandos SQL.

Isto pode ser feito com uso da função documentaçãoaddslashes como mostrado a seguir:


	<?php

	$strText = "Seu nome é O'Reilly?";
	$strText = addslashes($strText);

	?>
	
	

Então, usando esta função todo caractere ('), (") e (\) será acrescido automaticamente de uma barra invertida (\) no seu início. Esta barra extra é necessária apenas para possibilitar a inserção do dado no Banco de Dados. É importante ressaltar que o PHP realiza por padrão o documentaçãoaddslashes em todos os dados obtidos via $_GET, $_POST e $_COOKIE. Assim, não há necessidade de usar documentaçãoaddslashes em strings que já tenham sido "escapadas" (com barra invertida).

Na próxima lição estudaremos como extrair dados de um Banco de Dados. Mas, antes de seguir tente inserir mis pessoas no Banco de Dados (tal como mostramos no exemplo para a pessoa Gus Goose).



<< Lição 18: Criando Banco de Dados e suas Tabelas

Lição 20: Extraindo dados de um Banco de Dados >>