PHPドクトリンORMの初心者 - データベースをドロップするための有効なDSN?
質問
私は教義のためのチュートリアルを通過し、これまでのところ、それを好きだ、しかし私は、DBスキーマを再生/ドロップの時点で立ち往生しています。
これは私が(チュートリアルから、かなりストレート)を使用していたコードです。
require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();
$manager->setAttribute(Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
$manager->setAttribute(Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, true);
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = 'test';
$dbh = new PDO($dsn, $user, $password);
$conn = Doctrine_Manager::connection($dbh);
$conn->setOption('username', $user);
$conn->setOption('password', $password);
Doctrine::loadModels('models');
Fatal error: Uncaught exception 'Doctrine_Connection_Exception' with message
'You must create your Doctrine_Connection by using a valid Doctrine style dsn in order
to use the create/drop database functionality'
誰もが与えられた例は少し混乱している、私のDSNに使用する正しい構文を伝えることができます。
私はXAMPPを通じてローカルホスト上で実行しているよ。
何かアドバイスは感謝ます。
感謝します。
解決
このDNSは、それはまた、より読みやすいかもしれないことを言及しないように、動作します。 これは、「レイジー接続ですの」方法。
// At this point no actual connection to the database is created
$conn = Doctrine_Manager::connection('mysql://username:password@localhost/test');
// The first time the connection is needed, it is instantiated
// This query triggers the connection to be created
$conn->execute('SHOW TABLES');
あなたは下にPDOハンドラを使用したい場合は、としてそれを呼び出すます:
$pdo_handler = $conn->getPdh();
他のヒント
教義マニュアルには言います、例えば、:
phptype://username:password@hostspec/database
あなたの場合:
mysql://user:pass@127.0.0.1/test
あなたは間違っていないですが、PDO変異体を使用していない必要がありました。
ドクトリン2:
$params = array(
'driver' => 'pdo_mysql',
'host' => '127.0.0.1',
'port' => null,
'dbname' => 'test',
'user' => 'root',
'password' => 'test',
);
$conn = DriverManager::getConnection($params);
// Drop
try {
$conn->getSchemaManager()->dropDatabase($name);
} catch (\Exception $e) {
// Could not drop database
}
私はどこかでミスを犯したなら、私をСorrect
所属していません StackOverflow