1

私はdoctrineのチュートリアルを読んで気に入っていますが、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を介してlocalhostで実行しています。

アドバイスをいただければ幸いです。

ありがとう。

4

3 に答える 3

1

この 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();
于 2009-11-05T21:28:59.393 に答える
0

教義のマニュアルには、例えば、次のように書かれています。

phptype://username:password@hostspec/database

あなたの場合:

mysql://user:pass@127.0.0.1/test

PDOバリアントを使用しましたが、これは正しくありませんが、必要ありません。

于 2009-11-05T21:30:07.847 に答える
0

教義 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
}

私がどこかで間違いを犯した場合は、私を修正してください

于 2014-02-04T09:27:36.700 に答える