【发布时间】:2013-02-18 09:19:56
【问题描述】:
我对使用 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。相反,请在连接字符串中指定 dbname,例如 'mysql:host=localhost;dbname=testdb'
标签: php mysql pdo multiple-databases