जब आप कनेक्ट करते हैं तो आम तौर पर आप डीएसएन में डेटाबेस निर्दिष्ट करेंगे। लेकिन अगर आप एक नया डेटाबेस बना रहे हैं, तो जाहिर है कि आप इसे बनाने से पहले उस डेटाबेस को DSN निर्दिष्ट नहीं कर सकते।
आप अपने डिफ़ॉल्ट डेटाबेस को USE
. के साथ बदल सकते हैं कथन:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("create database newdatabase");
$dbh->query("use newdatabase");
बाद में CREATE TABLE
आपके नए डेटाबेस में स्टेटमेंट बनाए जाएंगे।
@माइक से दोबारा टिप्पणी करें:
मैंने अभी कुछ परीक्षण किए हैं और मुझे ऐसा होता नहीं दिख रहा है। डेटाबेस को बदलना केवल सर्वर पर होता है, और यह क्लाइंट में 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 किसी दिए गए नामित पैरामीटर का एक से अधिक बार उपयोग कर सकता है यदि PDO::ATTR_EMULATE_PREPARES सत्य है। तो यदि आप कह रहे हैं कि यह विशेषता डेटाबेस बदलने के दुष्प्रभाव के रूप में सत्य पर सेट है, तो इसे काम करना चाहिए।
लेकिन यह काम नहीं करता है -- इसे एक त्रुटि मिलती है "अमान्य पैरामीटर संख्या" जो इंगित करती है कि गैर-एमुलेटेड तैयार कथन प्रभावी रहता है।