query preparadas example ejemplos consultas php mysql pdo

preparadas - ¿Cómo selecciono una base de datos MySQL para usar con PDO en PHP?



pdo query fetch (4)

Debería establecer la base de datos cuando crea el objeto PDO. Un ejemplo (de here )

<?php $hostname = "localhost"; $username = "your_username"; $password = "your_password"; try { $dbh = new PDO("mysql:host=$hostname;dbname=mysql", $username, $password); echo "Connected to database"; // check for connection } catch(PDOException $e) { echo $e->getMessage(); } ?>

Quiero seleccionar una base de datos MySQL para usar después de que ya se haya creado un objeto PHP PDO. ¿Cómo hago esto?

// create PDO object and connect to MySQL $dbh = new PDO( ''mysql:host=localhost;'', ''name'', ''pass'' ); // create a database named ''database_name'' // select the database we just created ( this does not work ) $dbh->select_db( ''database_name'' );

¿Hay una PDO equivalente a mysqli :: select_db?

Tal vez estoy tratando de usar PDO incorrectamente? Por favor ayuda o explica

EDITAR

¿No debería usar PDO para crear nuevas bases de datos? Entiendo que la mayoría de los beneficios del uso de PDO se pierden en una operación poco utilizada que no inserta datos como CREATE DATABASE , pero parece extraño tener que usar una conexión diferente para crear la base de datos, luego crear una conexión PDO para crear otra llamadas.


Hasta donde yo sé, tienes que crear un nuevo objeto para cada conexión. Siempre puede extender la clase PDO con un método que se conecta a múltiples bases de datos. Y luego úsalo como quieras:

public function pickDatabase($db) { if($db == ''main'') { return $this->db[''main'']; //instance of PDO object else return $this->db[''secondary'']; //another instance of PDO object }

y $yourclass->pickDatabase(''main'')->fetchAll(''your stuff''); como $yourclass->pickDatabase(''main'')->fetchAll(''your stuff'');


Normalmente, debe especificar la base de datos en el DSN cuando se conecta. Pero si está creando una nueva base de datos, obviamente no puede especificar esa base de datos antes de crearla.

Puede cambiar su base de datos predeterminada con la declaración USE :

$dbh = new PDO("mysql:host=...;dbname=mysql", ...); $dbh->query("create database newdatabase"); $dbh->query("use newdatabase");

Las siguientes instrucciones CREATE TABLE se crearán en su nueva base de datos.

Comentario de @Mike:

Cuando se cambian las bases de datos de esa manera, parece forzar a PDO a emular las declaraciones preparadas. Establecer PDO :: ATTR_EMULATE_PREPARES en falso y luego intentar usar otra base de datos fallará.

Acabo de hacer algunas pruebas y no veo que eso suceda. Cambiar la base de datos solo ocurre en el servidor, y no cambia nada en la configuración de PDO en el cliente. Aquí hay un ejemplo:

<?php // connect to database try { $pdo = new PDO(''mysql:host=huey;dbname=test'', ''root'', ''root''); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); } catch(PDOException $err) { die($err->getMessage()); } $stmt = $pdo->prepare("select * from foo WHERE i = :i"); $result = $stmt->execute(array("i"=>123)); print_r($stmt->fetchAll(PDO::FETCH_ASSOC)); $pdo->exec("use test2"); $stmt = $pdo->prepare("select * from foo2 WHERE i = :i AND i = :i"); $result = $stmt->execute(array("i"=>456)); print_r($stmt->fetchAll(PDO::FETCH_ASSOC));

Si lo que dices es cierto, entonces esto debería funcionar sin error. PDO puede usar un parámetro nombrado dado más de una vez solo si PDO :: ATTR_EMULATE_PREPARES es verdadero. Entonces, si está diciendo que este atributo se establece en verdadero como un efecto secundario de cambiar las bases de datos, entonces debería funcionar.

Pero no funciona, recibe un error "Número de parámetro inválido" que indica que las declaraciones preparadas no emuladas siguen vigentes.


Obsesivamente, puede seleccionar una base de datos MySQL para usar después de que un objeto PHP PDO ya se haya creado como debajo de mi código

con la DECLARACIÓN DE USO ... Pero recuerde aquí USE STATEMENT es el comando mysql

try { $conn = new PDO("mysql:host=$servername;", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $conn->exec("use databasename"); //application logic //....... //application logic } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null;

Espero que mi código sea útil para solicitar