我尝试使用以下代码创建数据库:
// 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()
函数返回。
答案 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