Несколько баз данных с использованием PDO

Я довольно новичок в использовании PDO, и я хотел бы настроить его, чтобы иметь несколько баз данных по мере необходимости. Поэтому я создал функцию, которая позволяет передавать имя базы данных, которое будет использоваться как и когда.

Это работает в определенной степени, так как в нем выбирается база данных, в которую вы проходите, но даже если база данных опущена или некорректна, она все же позволяет вам выбирать таблицы и строки из базы данных, которая, по-видимому, выбирается случайным образом на основе пользователя MySQL ,

Это не главная проблема, я полагаю, но я хотел бы получить ее там, где она не будет выбирать какие-либо данные, если база данных не будет передана через мою функцию.

Мой код ниже, и я был бы признателен за ваши мысли о том, как я могу лучше подойти к этому. Благодарю.

index.php

require 'app/cream.php'; try { $db = new Cream_Model(); $db = $db->selectDb( 'cream' ); $data = $db->query('SELECT * FROM users'); foreach( $data as $row ) { print_r( $row ); } } catch( PDOException $e ) { echo 'An error has occurrred: ' . $e->getMessage() . '<br />'; } 

Model.php

 class Model { public $connection; public function connect() { try { $connection = new PDO( DB_DSN . ':' . DB_HOST, DB_USERNAME, DB_PASSWORD, array( PDO::ATTR_PERSISTENT => true ) ); $connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); $connection->setAttribute( PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC ); } catch( PDOException $e ) { echo 'An error has occurred: ' . $e->getMessage() . '<br />'; die(); } return $connection; } } 

Cream_Model.php

 class Cream_Model extends Model { public $conn; public function selectDb( $db ) { try { $conn = $this->connect(); $conn->exec( "USE $db" ); } catch( PDOException $e ) { echo 'An error has occurred: ' . $e->getMessage() . '<br />'; } return $conn; } } 

    Для PDO вы НЕ должны USE dbname напрямую.

    Я думаю, что происходит то, что у вас есть несколько экземпляров PHP-скрипта, и когда каждый из них выполняет имя USE dbname но PDO не знает об этом, и это вызывает беспорядок.

    Вместо этого вы должны указать имя dbname в вашей строке соединения PDO, например 'mysql:host=localhost;dbname=testdb' . Это означает, что вы не можете переключаться между базами данных после создания класса модели. Вы должны знать свое имя базы данных заранее и использовать его в конструкторе модели.

    Подробнее читайте в документации PDO .