通常在連接時將指定的DSN的數據庫。但是如果你要創建一個新的數據庫,顯然你不能在創建數據庫之前指定該數據庫。
你可以用USE
聲明更改默認數據庫:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
隨後CREATE TABLE
語句將在您的newdatabase創建。從@Mike
回覆評論:
When you switch databases like that it appears to force PDO to emulate prepared statements. Setting PDO::ATTR_EMULATE_PREPARES to false and then trying to use another database will fail.
我只是做了一些測試,我沒有看到這種事情發生。更改數據庫只發生在服務器上,並且不會更改客戶端中PDO配置的任何內容。這裏有一個例子:
<?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));
如果你說的是真的,那麼這應該沒有錯誤的工作。只有在PDO :: ATTR_EMULATE_PREPARES爲真的情況下,PDO纔可以多次使用給定的命名參數。所以,如果你說這個屬性被設置爲true作爲改變數據庫的副作用,那麼它應該工作。
但它不起作用 - 它會收到一個錯誤「無效的參數號」,它表示非模擬預處理語句保持有效。
顯示一些代碼... – Jakub 2012-01-02 20:50:37
您可能需要創建一個新的PDO對象連接到另一個數據庫的幫助。 – Ignas 2012-01-02 20:51:58
你可以使用'select table.field from database.table',假設你連接的任何用戶ID在其他db /表上都有適當的權限。 – 2012-01-02 20:53:11