Ir para conteúdo

Arquivado

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

Ronny Santana

[Resolvido] Concatenação em Variavel | mysql pdo e mysql

Recommended Posts

Boa Noite Galerinha Imasters...

 

Estou com um aplicativo que fiz no final do modulo 1 do curso de PHP aqui em Recife,

Esse aplicativo é todo ORIENTANDO a OBJETO (OOP), e tava mexendo na class de conexão, abaixo o COD

 

<?php
class Conexao {
public $db;
public $host    = 'localhost';
public $usuario = 'root';
public $senha   = '';
public $banco   = 'agenda';
public $dsn     = "mysql:host={$this->host};port=3306;dbname={$this->banco}";

public function Conectar() {
try{
	$this->db = new PDO($this->dsn, $this->usuario, $this->senha);
}

catch (PDOException $error) {
	print "Erro!: " . $error->getMessage() . "<br/>";
	die();
}
}

}

 

Minha dúvida é na propriedade $dsn, na 3ª linha

Esta dando esse erro "Parse error: syntax error, unexpected '"' in W:\www\especializa\php-programmer\projeto\class\Conexao.class.php on line 8"

Qual o erro nessa concatenação, e qual a maneira correta?

Já ultilizei dessa maneira em algum lugar q não lembro.

 

E sobre o mySQLi, há alguma maneira de poder ultilizar a class conexao tanto com PDO ou mySQLi?

 

Não os dois de uma só vez, mais desativando um ou outro, ou até mesmo verificando qual esta ultilizando mais memoria e desabilitar; Algo como verificação do tipo abaixo.

 

$memoria_PDO = alguma maneira de verificar...;
$memoria_mySQLi  = alguma maneira de verificar...;

if($memoria_PDO < $memoria_mySQLi) {
$this->Conectar_PDO(); exit; //Conecta via PDO
}
else {
$this->Conectar_mySQLi(); exit; //Conecta via PDO
}

 

 

Bom amigos, é isso ai, a parte da concatenação parece ser simples, mais testei varias maneiras, mais nenhuma com sucesso; Já a parte do PDO ou mySQLi, acho que é mais complicado, mais se inicialmente não for possivel, ta ai uma coisa interessante.

 

 

Vlw, e boa noite para todos...

 

ERRATA->TITULO

(mySQL | PDO e mySQLi)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quanto à concatenação: defina o valor de $dsn no construtor da classe. E use o operador de concatenação, evitando colocar variáveis dentro de string. Ou seja:

 

Prefira este padrão:

echo 'Olá, ' . $nome;

 

em vez de

echo 'Olá, $nome';

 

 

 

Quanto ao uso de memória, creio que o PHP não consegue saber isso por si só.

Quem gerencia memória é o SO, então tem que fazer a conexão e executar uma linha de comando para listar os processos, filtrar pelo processo buscado e verificar seu consumo de memória

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Beraldo, boa noite...

 

fiz da maneira que você disse e continuou dando o erro.

 

public $dsn     = "mysql:host=".$host.";port=3306;dbname="$banco;
// Parse error: syntax error, unexpected '.', expecting ',' or ';' in W:\www\especializa\php-programmer\projeto\class\Conexao.class.php on line 8

 

E sobre a ultilização do PDO & mySQLi, teria como ultilizar um dos dois na mesma class de conexão?

 

Ex.:

 

<?php
class Conexao {
public $db;
public $host    = 'localhost';
public $usuario = 'root';
public $senha   = '';
public $banco   = 'agenda';
public $dsn     = "mysql:host=".$host.";port=3306;dbname="$banco;
// public $mySQLi  = {$this->host}, {$this->usuario}, {$this->senha}, {$this->banco};

public function Conectar() {
try{
	$this->db = new PDO($this->dsn, $this->usuario, $this->senha);
	// print "Conectado via PDO";
}

catch (PDOException $error) {
	print "Erro!: " . $error->getMessage() . "<br/>";
	die();
}
// $this->db = new mysqli($this->host, $this->usuario, $this->senha, $this->banco);
}


}

 

Quando quiser ultilizar o PDO, comenta o mySQLi, e quando quiser ultilizar o mySQLi, comenta o PDO.

Isso teria algum problema com as consultas? Teria que alterar as consultas tbm?

Ou o mySQLi e o PDO ultilizar a mesma arquitetura para a query() ?

 

 

Vlw...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Thiago, boa noite...

 

Corrigi e ainda continua com o erro...

 

blic $dsn = "mysql:host=". $host .";port=3306;dbname=". $banco;
[error]
Parse error: syntax error, unexpected '.', expecting ',' or ';' in W:\www\especializa\php-programmer\projeto\class\Conexao.class.php on line 8
[/error]

 

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

leia de novo oque o Beraldo disse.

 

faça a concatenação no construtor da class, e não na declaração do atributo.

public function __construct(){
///concatene aqui dentro
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola William, não to usando construtor nessa class... tem apenas o COD abaixo.

 

<?php
class Conexao {
public $db;
public $host    = 'localhost';
public $usuario = 'root';
public $banco   = 'agenda';
public $senha   = '';
public $dsn = "mysql:host=localhost;port=3306;dbname=agenda";
// public $mySQLi  = {$this->host}, {$this->usuario}, {$this->senha}, {$this->banco};

public function Conectar() {
try{
	$this->db = new PDO($this->dsn, $this->usuario, $this->senha);
	// print "Conectado via PDO";
}

catch (PDOException $error) {
	print "Erro!: " . $error->getMessage() . "<br/>";
	die();
}
// $this->db = new mysqli($this->host, $this->usuario, $this->senha, $this->banco);
}


}

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verdade Beraldo, vou testar aqui...

 

vLW

 

E ai pessoal... Obrigado a todos

 

Fiz o construct e deu certo.

 

<?php
class Conexao {

public function __construct() {
$this->db;
$this->host    = 'localhost';
$this->usuario = 'root';
$this->banco   = 'agenda';
$this->senha   = '';
$this->dsn = "mysql:host={$this->host};port=3306;dbname={$this->banco}";
//public $mySQLi  = {$this->host}, {$this->usuario}, {$this->senha}, {$this->banco};
}

public function Conectar() {
try{
	$this->db = new PDO($this->dsn, $this->usuario, $this->senha);
	// print "Conectado via PDO";
}

catch (PDOException $error) {
	print "Erro!: " . $error->getMessage() . "<br/>";
	die();
}
// $this->db = new mysqli($this->host, $this->usuario, $this->senha, $this->banco);
}


}

 

Tenho mais uma dúvida, sobre o PDO e mySQLi, é possivel estar ultizando os dois?

 

Não de uma só vez, mais ativando um e desativando outro.

Nesse COD em cima, tem uma parte comentada do mySQLi, e se eu desativasse a parte do PDO e ativa-se o mySQLi?

 

Daria certo, teria alguma forma pra dár certo?

 

Vlww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, vlw pela dica, mais não acha que seria interessante informar dentro da class conexao msmo, em vez de passar pelo Conectar? Pq o Conectar é usado em várias Query's.

 

E nas Query's não teria nenhuma modificação?

 

VLw... e se poder dár um exemplo prático, vai ajudar...

 

Obrigado mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, vlw pela dica, mais não acha que seria interessante informar dentro da class conexao msmo, em vez de passar pelo Conectar? Pq o Conectar é usado em várias Query's.

Pode informar no construtor, armazenar isso numa propriedade de classe, pois cada tipo de conexão tem suas particularidades em execução de query, sendo necessário fazer o IF não somente na abertura de conexão

 

 

E nas Query's não teria nenhuma modificação?

 

Há formas diferentes de executar queries.

O PDO por exemplo exige o prepare(), por exemplo.

Então existem particularidades para cada modo de execução

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.