Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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() { $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)
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() { $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...
A última variável não foi concatenada:
public $dsn = "mysql:host=". $host .";port=3306;dbname=". $banco;
:thumbsup:
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
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
}
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() { $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
e o que impede você de criar um construtor?
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
você pode passar um parâmetro para Conectar, informando se quer suar PDO ou MySQLi. Não há problemas nisso
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!
>
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
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