Array
(
)

Duvida para gravar Dados

PHP
Gilberto
   - 12 jul 2013

Boa tarde! Amigos estou com mais uma duvida em php, mas agora e na hora de gravar os dados, vejam só.
tenho uma database em mysql chamado cphp;
tenho a tabela como o nome dados (bem simples com dois campos chave e observacao)
beleza em mysql sem problema nenhum mas a duvida e no php para gravar:
tenho código abaixo só para gravar no banco mysql
#Código

<?php
$conectar = mysql_connect("localhost","root","");
$SelecionaBD = mysql_select_db("cphp",$conectar);
$InstSQL = "insert into dados (chave, observacao) values(1,'Gilberto')";
$retorno = mysql_query($InstSQL,$conectar);
mysql_close($conectar);
?>


quando eu executo o script no browse não tenho retorno de erro e nenhum dado gravado no banco.
Gostaria de saber se alguém pode me ajudar com este código colocando um comentário onde esta o erro com a correção.

Desde já agradeço.

William (devwilliam)
   - 12 jul 2013

Colega muito estranho esse seu script não estar gravando os dados, aparentemente está correto. Verifique os tipos dos campos e tente inserir os dados direto no banco usando essa mesma instrução SQL.

Comentei o código:

#Código

<?php
/*
* Conecta-se ao SGBD MySQL passando 3 parâmetros
* @param servidor
* @param username
* @param password
*/
$conectar = mysql_connect("localhost","root","");

/*
* Define o banco de dados ativo para transações passando 2 parâmetros
* @param nome do banco de dados
* @param conexão válida 
*/
$SelecionaBD = mysql_select_db("cphp",$conectar);

/*
* Atribui a instrução SQL de INSERT para uma variável
*/
$InstSQL = "insert into dados (chave, observacao) values(1,'Gilberto')";

/*
* Executa a instrução de INSERT e captura o retorno passando 2 parâmetros
* @param instrução SQL
* @param conexão válida
*/
$retorno = mysql_query($InstSQL,$conectar);

/*
* Fecha a conexão
*/
mysql_close($conectar);
?>


OBS.: Uma dica, se estiver iniciando em PHP, procure usar PDO para interagir com o banco de dados. As funções "mysql_" estão ultrapassadas, existe outra no lugar que trás algumas melhorias "mysqli_", mas ainda prefiro PDO por vários motivos.

Qualquer dúvida poste novamente ...

0
|
0

Gilberto
   - 12 jul 2013

wllfl obrigado pelo retorno, achei o problema, era um erro de digitação o problema foi resolvido. Vc comentou sobre o PDO certo? E muito complicado?

0
|
0

William (devwilliam)
   - 13 jul 2013

Olá Gilberto, abaixo criei um pequeno script usando PDO baseado no seu exemplo. Comentei grande parte do código, mas existem inúmeras configurações que podem ser feitas utlizando PDO.

Entre as vantagens em utilizar esse tipo de conexão, destaco:
- Abstração de conexões e interações com banco de dados (Se não forem executadas instruções SQLs especificas de cada banco, você pode migrar de SGBD apenas modificando o construtor PDO).
- Segurança (prepared statements auxíliam na prevenção de ataques SQL injection)
- Suporte a diversos drivers
- Velocidade

#Código

<?php

/*
* Cria uma array com opções de configuração para conexão
* nesse caso estou setando como valor o comando 'SET NAMES UTF8'
* esse comando será executado toda vez que for iniciada uma conexão
* setando o charset do banco com o valor 'UTF8'.
*/
$opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');

/*
* Executa o construtor PDO para conexão com SGBD MySQL passando 4 parâmetros
* @param host e dbname
* @param user
* @param password
* @param $array (opções específicas do driver nesse caso MySQL)
*/
$pdo = new PDO("mysql:host=localhost; dbname=cphp","root","", $opcoes);
 
/*
* Atribui a instrução SQL de INSERT para uma variável
* no local dos valores para inserções uso '?' informando
* que será passado como parâmetro e na mesma ordem.
*/
$InstSQL = "insert into dados (chave, observacao) values(?,?)";
 
/*
* Prepara a instrução SQL passando 1 parâmetro
* @param instrução SQL
*/
$stm = $pdo->prepare($InstSQL);

/*
* Substitui os parâmetros '?' que foram informados na instrução SQL na mesma ordem.
*/
$stm->bindValue(1, 1);
$stm->bindValue(2, 'Gilberto');

/*
* Executa o comando e captura o retorno.
*/
$retorno = $stm->execute();
 
/*
* Libera as variáveis
*/
unset($stm);
unset($pdo);

?>


Existe muito material na net sobre PDO inclusive o tópico de banco de dados para quem pretende tirar certificação PHP é baseado em PDO.
Espero ter ajudado, qualquer dúvida poste novamente ...

0
|
0

Marcio Araujo
   - 13 jul 2013

isso muito me interessa, peguei esse codigo para estudar, obrigado pela duvida e pela resposta.

0
|
0

Gilberto
   - 13 jul 2013

BLZ wllfl obrigado vou me empenhar com estas informações.

0
|
0

Gilberto
   - 20 ago 2013

senhores, por favor, fechar este topico

0
|
0

Marcio Araujo
   - 20 ago 2013

alguem pode fechar?

0
|
0

William (devwilliam)
   - 23 ago 2013

Estou encerrando o post!!!

0
|
0