我能使用PHP中的PDO创建数据库吗?

53

我想创建一个使用PDO与MySQL交互的类。我能够使用PDO创建一个新的MySQL表吗?


5
标题谈论创建数据库,但问题谈论创建表格。这两者是非常非常不同的事情。 - Mawg says reinstate Monica
2个回答

118

可以的。

PDO构造函数的第一个参数dsn不一定需要指定数据库名,你可以直接使用mysql:host=localhost。然后,只要你有足够的权限,就可以使用普通的SQL命令来创建数据库和用户等。

以下是一个install.php文件的示例。它使用root用户登录,创建一个数据库、一个用户,并授予该用户对新创建的数据库的全部权限:

<?php

    $host = "localhost";

    $root = "root";
    $root_password = "rootpass";

    $user = 'newuser';
    $pass = 'newpass';
    $db = "newdb";

    try {
        $dbh = new PDO("mysql:host=$host", $root, $root_password);

        $dbh->exec("CREATE DATABASE `$db`;
                CREATE USER '$user'@'localhost' IDENTIFIED BY '$pass';
                GRANT ALL ON `$db`.* TO '$user'@'localhost';
                FLUSH PRIVILEGES;")
        or die(print_r($dbh->errorInfo(), true));

    }
    catch (PDOException $e) {
        die("DB ERROR: " . $e->getMessage());
    }
?>

3
@thearchitect 很好的答案却没有被接受?我感到失落 :( - Jingshao Chen
8
谢谢你的有帮助的回答,@JingshaoChen!对于其他人,我花了几个小时来调试一个“创建数据库”的查询,结果才意识到在字符串“Create Database $db”中,那些是“反引号”,而不是单引号!!你必须用反引号括起新数据库的名称!!希望这能帮助其他人避免因为同样的问题而感到恼怒。 - hypervisor666
@Volomike 我有点困惑 - 如果我的网站有 Cpanel,我能用这个吗?我已经尝试过了,但好像不起作用。 - Lan
我们能否用Postgres做类似的事情? - SandeliusME
1
你创建完新数据库后,如何打开它?需要一个新的PDO对象吗? - Nick Mitchell
显示剩余6条评论

-1

是的,它是一样的,就像运行常规查询一样,比如“CREATE TABLE ...”。


2
在创建PDO连接时,您需要将该连接与数据库关联起来,对吗?我想知道能否避免这种关联,或者使用默认的MySQL数据库是否会存在风险,或者最好只是创建一个空数据库,供PDO连接使用。 - Xerri
1
@Haim:这里的root用户和密码是什么?不是mysql的用户ID和密码,对吧? - logan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接