繁体   English   中英

使用PDO的多个数据库

[英]Multiple Databases using 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没有意识到它发生时,这会导致整个混乱。

相反,您应该在PDO连接字符串中指定dbname,例如'mysql:host=localhost;dbname=testdb' 这意味着在创建Model类之后,您无法在数据库之间切换。 您应该事先知道您的数据库名称并在Model构造函数中使用它。

阅读PDO文档中的更多内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM