我是使用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,您不應該直接執行'使用dbname'。相反,在連接字符串中指定dbname,如['mysql:host = localhost; dbname = testdb'](http://php.net/manual/en/ref.pdo-mysql.connection.php) – mvp 2013-02-18 09:25:04