Ir para conteúdo

POWERED BY:

Arquivado

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

mv.silvapereira

Select com PDO

Recommended Posts

Então galera estou tentando fazer uma consulta com PDO e associar os resultados que ele achar a uma variavel de sessão porém gostaria que ele pegasse todas as colunas e seus respectivos resultados automaticamente por um laço.. eu consigo fazer isso com mysql_ mas queria fazer com PDO

 

Exemplo com Mysql_

$sql = "SELECT * FROM `db`.`tabela` WHERE `usuario` = '{$usuario}'";
				$query = mysql_query($sql);
				
				// Se a consulta falhou
				if (!$query) {
					return false;
				} else {
					// Traz os dados encontrados para um array
					$dados = mysql_fetch_assoc($query);
					// Limpa a consulta da memória
					mysql_free_result($query);
					
					// Passa os dados para a sessão
					foreach ($dados AS $chave=>$valor) {
						$_SESSION[$chave] = $valor;
					}
				}

 

 

Mas quero isso com PDO e não sei como fazer.. foi isso que consegui até agora

try {
			    // executa uma instrução SQL de consulta
			    $sql = $db->query("SELECT * FROM tabela");
			    if ($sql)
			    {
			        while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
			        	$_SESSION['membro_'$coluna] =  $row['$valor'];
			        }
			        echo $_SESSION['membro_email'];
			    }
			}
			catch (PDOException $error_select) {
				print "Erro!: " . $error_select->getMessage() . "<br/>";
				die();
			}

 

Explicando.. queria que dentro desse laço while.. ou até mesmo com foreach eu pegasse o valor do banco de dados e colocasse em uma variavel de sessão atribuindo um sufixo para identificar que seria a variavel $coluna

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$_SESSION['membro_'$coluna] = $row['$valor'];

 

Tem que concatenar as strings.

 

Ou faz assim:

$_SESSION['membro_' . $coluna] = $row['$valor'];

Ou assim:

$_SESSION["membro_{$coluna}"] = $row['$valor'];

 

Foi só isso que olhei, a questão da atribuição para uma sessão.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

acima de todo seu código insira:

 

session_start();

 

 

atribuindo a session o valor de uma busca:

 

$_SESSION['nomedasessao'] = $variavel['dados'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

se vai retornar uma linha use fetch() mais de uma fetchAll(), outro jeito de consultar é usar prepare() e execute().

 

 

$stmt = $db->prepare($sql);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);

foreach($result as $key => $value){
    $_SESSION[$key] = $value;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poh valeu shini.. estamos quase lá... com sua dica eu a $_SESSION['$key'] virou um array.. quando eu do um print_r nela ela me retornar um array com todas as informações do banco.. mas se eu do um echo por exemplo em $_SESSION['email'] que é uma das colunas do banco de dados ele me retorna escrito na tela "Array" então se eu dou um print_r ele me retorna outro array com o ultimo registro da tabela.. o mais estranho é q eu estou condicionando a pesquisa do sql e teoricamente era pra ele mostrar apenas um resultado...

 

Na verdade o que eu queria era o seguinte estou fazendo um sistema de login então ao logar o scritp gravar no $_SESSION a coluna como nome da variavel de sessão e o valor do banco de dados nela.. aii toda vez q eu precisasse retonar alguma informação do banco de dados da pessoa que está logada eu faria so assim.. echo $_SESSION['nome'] aii ele me retorna o nome..

 

Espero q tenham entendido..

Compartilhar este post


Link para o post
Compartilhar em outros sites

foi, acabei esquecendo, use a chave correta

 

 

foreach($result as $key => $value){
   $_SESSION[$key] = $value['nome'];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... ainda não ficou do jeito que eu queria.. tipo assim..

 

			try {
			    $sql = $db->query("SELECT * FROM membro WHERE email = 'marcos' and senha = 'marcos'");
			    if ($sql)
			    {
			    	$sql_result = $sql->fetchAll(PDO::FETCH_ASSOC);
			        foreach($sql_result as $key=> $value)
			        {
			          	echo $_SESSION[$key] = $value['email'];
			            
			        }
			    }
			}
			catch (PDOException $error_select) {
				print "Erro!: " . $error_select->getMessage() . "<br/>";
				die();
			}

			echo $_SESSION['email'];

Esse é meu código depois das dicas.. então.. dentro do foreach ele imprime o valor de boa.. mas se eu tenho da um echo na session fora.. igual tah no codigo acima ele não me imprime nada.. eu acredito que seja pq no laço ta atribuindo o nome da session como a $key pelo menos quando eu imprimo a $key ela imprime 0123 de acordo com a quantidade de resultados trazidos.. tem como mostrar puxar o nome da coluna e colocar no nome da ssesion??

 

 

Outra coisa será q tinha como dentro foreach colocar assim para com uma unica linha ele criar todos os sessions?? Por que aii eu não teria q criar uma linha para cada coluna da tabela

$_SESSION[$key] = $value[$key]

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi mto bem,

 

se vc atribuir assim:

 

 

 
foreach($lista as $item){
    $_SESSION['membro'] = $item
}
 
//vai recuperar assim
$_SESSION['membro']['nome']

 

vc iniciou a sessão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo eu quero recuperar o nome da coluna do banco de dados e colocar no nome da ssession.. e atribuir o resultado.. Assim cada vez q eu chamar a $_SESSION['NOME_DA_COLUNA'] ele vai me trazer o resultado de acordo com a coluna no banco de dados.. =D sei que é confuso espero consigam me entender kkkkkkkk

 

Então povo consegui finalmente fazer o que eu queria mas não sei se foi da melhor forma kkkkkkkkkkkkk

 

 

			try {
			    // executa uma instrução SQL de consulta
			    $sql = "SELECT * FROM membro WHERE email = 'marcos' and senha = 'marcos'";
			    $query = $db->query($sql);

			    if ($query)
			    {
			    	$sql_result = $query->fetchAll(PDO::FETCH_ASSOC);

			    	//print_r($sql_result);
			        // percorre os resultados via iteração
			        foreach($sql_result as $key=> $value)
			        {
			        	foreach ($value as $chave => $valor) {

			        		$_SESSION[$chave] = $valor;
			        	}			            
			        }
			    }
			}
			catch (PDOException $error_select) {
				print "Erro!: " . $error_select->getMessage() . "<br/>";
				die();
			}

			echo "Id = ".$_SESSION['id']."<br />";
			echo "Email = ".$_SESSION['email']."<br />";
			echo "Senha = ".$_SESSION['senha']."<br />";

 

Explicando.. na variavel $sql_result fica armazenado um array com os resultados do banco de dados que é esse

"Array ( [0] => Array ( [id] => 1 => marcos [senha] => marcos ) )"

No primeiro foreach eu separo os resultados e ele me gera outro array $value com esse resultado

"Array ( [id] => 1 => marcos [senha] => marcos )"

Então eu pego esse $value e jogo dentro do segundo foreach.. aii sim consigo atribuir a coluna como $chave =D

 

Não sei se é a melhor forma.. se existe outra por favor me falem.. mas essa foi a forma q consigui =D

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.