php - PDO似乎没有创建MySQL数据库

标签 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 和类似工具手动创建数据库没有问题。

编辑2:

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

最佳答案

您对 exec() 的调用不会引发异常。您必须使用如下属性为每个 PDO 连接启用该功能:

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

如果您从 exec() 收到错误消息,您会看到以下内容:

Could not connect to database: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLLATION utf8_unicode_ci' at line 1

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

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

关于php - PDO似乎没有创建MySQL数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22967739/

相关文章:

mySql:从另一个表获取一行的最新事务

php - CentOS php pecl PDO_DBLIB

PHP Laravel : No connection could be made because the target machine actively refused it

java - 联系表格 7 wordpress 下拉菜单

php - 按键排序数组并反转结果

php - 使用codeigniter在mysql中输入数据

MySQL 根据匹配日期将多行合并为一行

java - Heroku 上的 "(User has exceeded the ' max_user_connections ' resource (current value: 10))"错误

php - 我可以在 PHP 中混合使用 MySQL API 吗?

PHP 节省时间 HH :MM in MySQL