PDO似乎没有创建MySQL数据库

时间:2014-04-09 15:48:52

标签: php mysql pdo

我尝试使用以下代码创建数据库:

// Set up DB connection and creates the DB
try {

    $connection = new \PDO(
            'mysql:host='.Settings\Database::$host.';',
            Settings\Database::$username,
            Settings\Database::$password);

    $connection->exec("CREATE DATABASE IF NOT EXISTS ".Settings\Database::$databaseName." CHARACTER SET utf8 COLLATION utf8_unicode_ci;");
} catch (\PDOException $exception) {

    die("Could not connect to database: ".$exception->getMessage());
}

问题是没有创建数据库并且我没有收到任何错误,除了当我尝试使用PDO创建表时我收到此错误:

阅读编辑2

Could not connect to database: SQLSTATE[HY000] [1049] Unknown database 'dbname'

修改

使用 phpMyAdmin 和similars手动创建数据库没有问题。

编辑2:

我错误地认为错误是由CREATE TABLE...语句给出的。相反,错误由异常处理中的die()函数返回。

1 个答案:

答案 0 :(得分:2)

您对exec()的电话不会引发异常。您必须为每个PDO连接启用具有以下属性的那个:

$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

如果您收到exec()的错误消息,您会看到:

  

无法连接到数据库:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中出错;检查与MySQL服务器版本对应的手册,以便在第1行的“COLLATION utf8_unicode_ci”附近使用正确的语法

CREATE DATABASE的语法使用关键字COLLATE,而非COLLATION

请参阅http://dev.mysql.com/doc/refman/5.6/en/create-database.html