Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Problemas de conexiones PDO

Estas en el tema de Problemas de conexiones PDO en el foro de PHP en Foros del Web. Buenos días, tengo un problema con las conexiones PDO Estoy trabajando con servidor local XAMPP en Windows 10 con puerto de Apache 8080. Tengo la ...
  #1 (permalink)  
Antiguo 19/09/2015, 06:19
 
Fecha de Ingreso: noviembre-2014
Mensajes: 5
Antigüedad: 9 años, 5 meses
Puntos: 0
Exclamación Problemas de conexiones PDO

Buenos días, tengo un problema con las conexiones PDO

Estoy trabajando con servidor local XAMPP en Windows 10 con puerto de Apache 8080.

Tengo la siguiente clase:

<?php
class Conexiones
{
private $conexion;
private $host = 'localhost';
private $usuario = 'root';
private $pass = '';
private $bbdd = 'boda';

public function conectar() {
try {
$this->conexion = new PDO("mysql:host = $this->host;dbname = $bbdd", $this->usuario, $this->pass);
$this->conexion->exec("SET CHARACTER SET utf8");
$this->conexion->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
$this->conexion->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$this->conexion->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e) {
print "ERROR: ".$e->getMessage();
die();
}
}

public function consulta($consulta, $datos) {
$sql = $this->conexion->prepare($consulta);
$sql->execute($datos);
}

public function desconectar() {
$this->conexion = null;
}

public function __clone() {
trigger_error('La clonación de este objeto no está permitida', E_USER_ERROR);
}
}
?>

La base de datos "boda" está creada, con una tabla "invitados" pero al intentar hacer un insert:

public static function addInvitado($nombre, $novios, $categoria, $tipo, $numPersonas, $asiste = 1) {
$insert = "INSERT INTO invitados (nombre, novios, categoria, tipo, numPersonas, asiste) VALUES (:nombre, :novios, :categoria, :tipo, :numPersonas, :asiste)";

$datos = array('nombre' => $nombre, 'novios' => $novios, 'categoria' => $categoria, 'tipo' => $tipo, 'numPersonas' => $numPersonas, 'asiste' => $asiste);

$conexion = new Conexiones();
$conexion->conectar();
$result = $conexion->consulta($consulta, $datos);
$conexion->desconectar();

return $result;
}

Es cuando al recoger de un formulario los datos, enviarlos por AJAX a un archivo php y ejecutar el método de la clase Invitados.php (esta de arriba) me de vuelve el error de la excepcion PDO: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected

Que la base de datos no está seleccionada, pero está creada y pasada al PDO como se ve en la clase "Conexiones".
  #2 (permalink)  
Antiguo 19/09/2015, 07:56
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problemas de conexiones PDO

Yo creo que tu conexión está mal, observa:
Código PHP:
Ver original
  1. // MAL
  2.  $this->conexion = new PDO("mysql:host = $this->host;dbname = $bbdd", $this->usuario, $this->pass);
  3.  
  4. // BIEN
  5.  $this->conexion = new PDO("mysql:host = $this->host;dbname = $this->bbdd", $this->usuario, $this->pass);

Olvidaste que la variable "bddd" es parte de tu instancia, y ahí la usabas como variable local.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/09/2015, 10:23
 
Fecha de Ingreso: noviembre-2014
Mensajes: 5
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Problemas de conexiones PDO

Vale, sí, ha sido sólo un error ya que he intentado tantas cosas que lo último que escribí quedó así.

Pero ya lo había intentado y tampoco funciona:

Código PHP:
$this->conexion = new PDO("mysql:host = $this->host;dbname = $this->bbdd"$this->usuario$this->pass); 
También:

Código PHP:
$this->conexion = new PDO("mysql:host = {$this->host};dbname = {$this->bbdd}"$this->usuario$this->pass); 
También:

Código PHP:
$this->conexion = new PDO("mysql:host = localhost;dbname = boda"$this->usuario$this->pass); 
Sigue dando la misma excepción.
  #4 (permalink)  
Antiguo 19/09/2015, 11:20
 
Fecha de Ingreso: noviembre-2014
Mensajes: 5
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Problemas de conexiones PDO

Resuelto, el primer fallo eran los espacios que dejaba entre los signos de igual "=" y lo segundo es que cuando usamos como valores atributos de una clase o de un array, tienen que ir entre llaves:
Código PHP:
$this->conexion = new PDO("mysql:host={$this->host};dbname={$this->bbdd}"$this->usuario$this->pass); 
Y ya funciona.

Etiquetas: php+basedatos, php+bd+mysql, php+clases
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:54.