Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

phpricardo

Funções php + PDO

Recommended Posts

Olá galera, bem estou aqui tentando aprender mais sobre php e junto quero pegar PDO, pois vi as vantagens, mas percebo que é meio necessário um conhecimento em Orientação a Objetos, mas levando.

 

Pois bem, começando aqui tenho um pedaço de codigo que estou fazendo gostaria de saber se estar correto ou qual melhorias pode ser feito nele agora.

 

http://paste.lymas.com.br/1231

 

(code do editor no Firefox não funcionou :S)

 

Bem espero que possam dar a força ai. Acho que vai pintar muitas dúvidas no decorrer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sintaticamente, só faltou a referência à instância PDO:

 

try {
    //adiciona dados
    $add    = exec("INSERT INTO livros_cadastrados (cod_livro, nome_livro, autor_livro, editora_livro, tipo_livro, ano_livro)
                   VALUES ('$cod_livro', '$nome_livro', '$autor_livro', '$editora_livro', '$tipo_livro', '$ano_livro')");
    }
    catch (PDOException $i)
    {
        //se tiver erro, exibe
        echo "Erro: " . $i->getMessage();
    }
}

$meuDB = new PDO($dsn,$username,$password);

try {
    //adiciona dados
    $add    = $meuDB->exec("INSERT INTO livros_cadastrados (cod_livro, nome_livro, autor_livro, editora_livro, tipo_livro, ano_livro)
                   VALUES ('$cod_livro', '$nome_livro', '$autor_livro', '$editora_livro', '$tipo_livro', '$ano_livro')");
    }
    catch (PDOException $i)
    {
        //se tiver erro, exibe
        echo "Erro: " . $i->getMessage();
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

sintaticamente, só faltou a referência à instância PDO:

 

try {
    //adiciona dados
    $add    = exec("INSERT INTO livros_cadastrados (cod_livro, nome_livro, autor_livro, editora_livro, tipo_livro, ano_livro)
                   VALUES ('$cod_livro', '$nome_livro', '$autor_livro', '$editora_livro', '$tipo_livro', '$ano_livro')");
    }
    catch (PDOException $i)
    {
        //se tiver erro, exibe
        echo "Erro: " . $i->getMessage();
    }
}

$meuDB = new PDO($dsn,$username,$password);

try {
    //adiciona dados
    $add    = $meuDB->exec("INSERT INTO livros_cadastrados (cod_livro, nome_livro, autor_livro, editora_livro, tipo_livro, ano_livro)
                   VALUES ('$cod_livro', '$nome_livro', '$autor_livro', '$editora_livro', '$tipo_livro', '$ano_livro')");
    }
    catch (PDOException $i)
    {
        //se tiver erro, exibe
        echo "Erro: " . $i->getMessage();
    }
}

 

Mas a conexão já está feita no conn.php

$conn_pdo = 'mysql:host=localhost;port=3306;dbname=livrosBD';

$usuario = 'root';

$senha = '';

$opcao = array(

PDO::ATTR_PERSISTENT => true,

PDO::ATTR_CASE => PDO::CASE_LOWER

);

try

{

$pdo = new PDO($conn_pdo, $usuario, $senha, $opcao);

}

catch (PDOException $e)

{

echo "Erro: ", $e->getMessage();

}

 

Parece que assim fica melhor?

 

<?php
//conexão mysql com pdo :D
$conn 	= new PDO('mysql:host=localhost;port=3306;dbname=livrosBD', 'root', '');

//função erro
function erro() {
	echo "(!) Erro ocorrido. (!)";
}

//função inserir usando pdo
function inserir() {

$nome_livro		= $_POST['nome_livro'];
$autor_livro	        = $_POST['autor_livro'];
$editora_livro	        = $_POST['editora_livro'];
$tipo_livro		= $_POST['tipo_livro'];
$ano_livro		= $_POST['ano_livro'];

try {
	//adiciona dados
	$add	= $conn->prepare("INSERT INTO livros_cadastrados (cod_livro, nome_livro, autor_livro, editora_livro, tipo_livro, ano_livro)
				   VALUES ('$cod_livro', '$nome_livro', '$autor_livro', '$editora_livro', '$tipo_livro', '$ano_livro')");
	}
	catch (PDOException $i)
	{
		//se tiver erro, exibe
		echo "Erro: " . $i->getMessage();
	}
}
?>

Estou com a dúvida agora meio que sabendo e não sabendo, mas como vou fazer pra que no formulário html ele vá até o arquivo de função e veja que a função escolhida foi a de inserir (de acordo com formulário) e ai faz a ação.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> </title>

</head>
<body>
<form action="" method="POST">
	<table>
		<tr>
			<td><h3>Livros Ricardo 1.0</h3></td>
		</tr>
		<tr>
			<td>Nome do livro: </td><td><input type="text" name="nome_livro" id="nome_livro"></td>
		</tr>
		<tr>
			<td>Autor: </td><td><input type="text" name="autor_livro" id="autor_livro"></td>
		</tr>
		<tr>
			<td>Editora: </td><td><input type="text" name="editora_livro" id="editora_livro"></td>
		</tr>
		<tr>
			<td>Tipo: </td>
			<td>
				<select name="tipo_livro" id="tipo_livro">
					<option value=""></option>
					<option value="Desenvolvimento">Desenvolvimento</option>
					<option value="Ficção Cientifica">Ficção Cientifica</option>
					<option value="Literatura Brasileira">Literatura Brasileira</option>
					<option value="Banco de Dados">Banco de dados</option>
					<option value="Universitário">Universitário</option>
					<option value="Redes">Redes</option>
					<option value="Aventura">Aventura</option>
					<option value="Auto Ajuda">Auto Ajuda</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>Ano Publicação: </td><td><input type="text" name="ano_livro" id="ano_livro"> (ex: 1999)</td>
		</tr>
		<tr>
			<td></td>
			<td><input type="submit" value="Cadastrar" class="cadastrar"></td>
		</tr>
	</table>
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

opa ricardo =]

 

simplificando oque o evandro disse.. basicamente vai funciona .. so falto você instancia ( da um New Objeto) a conexao, exec é um metodo que pertence ao objeto PDO *conexao , você não pode usar a funcao solta .. o exemplo do evandro mostra bem como faze =]

 

quanto ao forme tem varios jeitos por exemplo

 

bota uma condicao

 

if($_POST['campo1'] != '' AND $_POST['campo2'] != ''){
$Conn->Inserir($Camp1,$Camp2);
}

assim quando você submeter o formulario ele vai verificar se os campos tem dados e executar a acao de inserir

 

 

quanto a outra postagem usando "prepare" faltou executar .. você so preparo a consulta.. vo bota um exemplo

$Conn->beginTransaction();
	$Insert = $Conn->prepare("
	INSERT INTO abs_senhas (CODIGOUSUARIO, USUARIO, SENHA, ADMINISTRADOR, AuthenticationPass) 
            VALUES (
            :CodigoUsuario
            , :Usuario
            , :Senha
            , :ADMINISTRADOR
            , :AuthenticationPass);
            ");
			$Insert->bindParam(':CodigoUsuario', $Number, PDO::PARAM_INT);
			$Insert->bindParam(':Usuario', $Usuario, PDO::PARAM_STR);
			$Insert->bindParam(':Senha', $Senha, PDO::PARAM_STR);
			$Insert->bindParam(':ADMINISTRADOR', $Administrador, PDO::PARAM_STR);
			$Insert->bindParam(':AuthenticationPass', $AuthenticationPass, PDO::PARAM_STR);
			$Insert->execute();
			if($Conn->commit()){
				echo '<script> alert("Registro inserido com sucesso !") </script> ';
			}else {
				$Conn->rollBack();
				throw new RuntimeException( sprintf( 'Erro ao executar a consulta: %s' , implode( ',' , $Conn->errorInfo() ) ) , $Conn->errorCode() );
			}
		}

 

valww

 

obs: cuide pra nao ficar postando muitas vezes seguidas porque depende o moderador pode considerar flooder

Compartilhar este post


Link para o post
Compartilhar em outros sites

fica mais extenso mas poupa um monte de dor de cabeça mais pra frente =]

alias.. dpois por exemplo pra monta uma tela com cadastro listagem paginacao autentificacao ajax olha comeh q fica..

 

if($_POST['Usuario'] != ''and $_POST['Senha'] != ''){
ULogin::AuthenticationAdmin(Registry::get('Database'));
ULogin::Create($_POST['Usuario'], $_POST['Senha'], $_POST['Administrador'], $_POST['AuthenticationPass'], Registry::get('Database'));
}
$SInsertUsuarios = New Layout();
$SInsertUsuarios->Top();
$SInsertUsuarios->Body(Menu::Admin() ,ObjUsuarios::Insert(ULogin::Read(Registry::get('Database'), null , TRUE)));
$SInsertUsuarios->Footer();

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas a conexão já está feita no conn.php

$conn_pdo = 'mysql:host=localhost;port=3306;dbname=livrosBD';

$usuario = 'root';

$senha = '';

$opcao = array(

PDO::ATTR_PERSISTENT => true,

PDO::ATTR_CASE => PDO::CASE_LOWER

);

try

{

$pdo = new PDO($conn_pdo, $usuario, $senha, $opcao);

}

catch (PDOException $e)

{

echo "Erro: ", $e->getMessage();

}

 

Neste caso, então, usa-se $pdo->exec() como o Will já explicou.

 

 

Estou com a dúvida agora meio que sabendo e não sabendo, mas como vou fazer pra que no formulário html ele vá até o arquivo de função e veja que a função escolhida foi a de inserir (de acordo com formulário) e ai faz a ação.

 

Também acredito que já tenha sido perfeitamente explicado.

 

 

Poxa mas ai com prepare fica + extenso o codigo não ("complicado")

 

fica mais extenso mas poupa um monte de dor de cabeça mais pra frente =]

valww

 

Gostaria da opinião de quem já trabalhou com outros SGDB, mas com os 3 (my, pg, e lite) que já trabalhei, nenhum fazia necessidade do tipo de dados ser passado PARA o banco através do parâmetro data_type

 

Para fazer inserções preparadas, existe um método tão seguro quanto, e mais curto:

$meuDb = new PDO('mysql:hostname=localhost;dbname=teste','root','');
$stmt = $meuDb->prepare("INSERT INTO `usuarios`(`nome`,`senha`,`email`) VALUES(?,?,?)");

$values = array(
    "Evandro",
    "123456",
    "evandrofranco@gmail.com"
);

$stmt->execute($values);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cabo que ficou assim :) Está funcionando tecnicamente, agora irei ver no que da pra melhorar, validar os campos certinho e melhorar.

 

vamo que vamo...

 

html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> </title>

</head>
<body>
<form action="index.php" method="POST">
	<table>
		<tr>
			<td><h3>Livros Ricardo 1.0</h3></td>
		</tr>
		<tr>
			<td>Nome do livro: </td><td><input type="text" name="nome_livro" id="nome_livro"></td>
		</tr>
		<tr>
			<td>Autor: </td><td><input type="text" name="autor_livro" id="autor_livro"></td>
		</tr>
		<tr>
			<td>Editora: </td><td><input type="text" name="editora_livro" id="editora_livro"></td>
		</tr>
		<tr>
			<td>Tipo: </td>
			<td>
				<select name="tipo_livro" id="tipo_livro">
					<option value=""></option>
					<option value="Desenvolvimento">Desenvolvimento</option>
					<option value="Ficção Cientifica">Ficção Cientifica</option>
					<option value="Literatura Brasileira">Literatura Brasileira</option>
					<option value="Banco de Dados">Banco de dados</option>
					<option value="Universitário">Universitário</option>
					<option value="Redes">Redes</option>
					<option value="Aventura">Aventura</option>
					<option value="Auto Ajuda">Auto Ajuda</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>Ano Publicação: </td><td><input type="text" name="ano_livro" id="ano_livro"> (ex: 1999)</td>
		</tr>
		<tr>
			<td></td>
			<td><input type="submit" value="Cadastrar" class="cadastrar"></td>
			<input type="hidden" name="action" value="i">
		</tr>
	</table>
</form>
</body>
</html>
<?php
include("funcoes.php");

//chamada das funções
switch ($_POST['action'])
{
	//inserir dados
	case 'i':
		if (inserir($_POST)) {
			echo "(!) Livro Cadastrado com sucesso. (!)";
		}
	break;
}

?>
<?php
//função erro
function erro() {
	echo "(!) Erro ocorrido. (!)";
}

//função inserir usando pdo
function inserir() {
$conn 	= new PDO('mysql:host=localhost;port=3306;dbname=livrosBD', 'root', '');

$nome_livro		= $_POST['nome_livro'];
$autor_livro	        = $_POST['autor_livro'];
$editora_livro	        = $_POST['editora_livro'];
$tipo_livro		= $_POST['tipo_livro'];
$ano_livro		= $_POST['ano_livro'];

try {
	//adiciona dados
	$add = $conn->prepare("INSERT INTO livros_cadastrados (cod_livro, nome_livro, autor_livro, editora_livro, tipo_livro, ano_livro) 
							 VALUES (NULL, :nome_livro, :autor_livro, :editora_livro, :tipo_livro, :ano_livro)");
	$add->bindValue(':nome_livro', $nome_livro, PDO::PARAM_STR);
	$add->bindValue(':autor_livro', $autor_livro, PDO::PARAM_STR);
	$add->bindValue(':editora_livro', $editora_livro, PDO::PARAM_STR);
	$add->bindValue(':tipo_livro', $tipo_livro, PDO::PARAM_STR);
	$add->bindValue(':ano_livro', $ano_livro, PDO::PARAM_STR);
	
	return $add->execute();
	}
	catch (PDOException $i)
	{
		//se tiver erro, exibe
		echo "Erro: " . $i->getMessage();
	}
}


?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

fazia necessidade do tipo de dados ser passado PARA o banco através do parâmetro data_type

nao necessariamente, assim tambem como não necessariamente precisaria preparar.. poderia ate mesmo ser assim..

 

$Var = 1;
$ComBind = $Conn->exec("
SELECT * FROM abs_senhas WHERE USUARIO = $Var
");

mas impoen integridade aos dados =]

 

requisicao

$SemBind = $Conn->prepare("
	SELECT * FROM abs_senhas WHERE NOME_USUARIO = ? 
	");
	if($SemBind->execute(array('1'))){ //nome do usuario tem que ser string
		echo 'passo';
	};

resposta

passo

requisicao

	$ComBind = $Conn->prepare("
	SELECT * FROM abs_senhas WHERE NOME_USUARIO = :Nome
	");
	$ComBind->BindParam(':Nome', 1, PDO::PARAM_STR);//o nome do usuario tem que ser string
	if($ComBind->execute()){
		echo 'passo';
	};
resposta

Cannot pass parameter 2 by reference

valww

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.