← PHP MySQL数据库连接:从mysqli_connect开始 PHP创建MySQL表的三种方式:告别mysql_query →

告别mysql_create_db(),PHP中创建数据库的方法

原创 2026-05-21 PHP 已有人查阅

老PHP开发都记得,早期版本里有个mysql_create_db()函数,一行代码就能建库。但从PHP 4.3开始这个函数就被标记为弃用了,PHP 7之后更是彻底移除。为啥?因为这个函数设计上有局限性,它只能操作MySQL,而且跟MySQL改进扩展的整体架构不太搭。

现在主流方案就两个:MySQLi 和 PDO。这两个扩展都支持创建数据库的操作,写法上略有不同。

核心知识点:CREATE DATABASE语句

无论用MySQLi还是PDO,底层实际执行的都是SQL里的CREATE DATABASE语句。这条语句的基本语法:

sql
CREATE DATABASE [IF NOT EXISTS] 数据库名

IF NOT EXISTS是个好习惯——如果数据库已经存在,加上这个就不会报错。

方案一:MySQLi面向过程方式

这是代码号比较推荐的入门写法,直观好理解:

<?php
$host = 'localhost:3306';
$user = 'root';
$pass = '123456';

// 连接MySQL服务器(不指定数据库)
$conn = mysqli_connect($host, $user, $pass);

if(!$conn) {
    die('连接失败:' . mysqli_connect_error());
}

echo '连接成功<br/>';

// 创建数据库
$dbname = 'codexuexi_db';  // 数据库名建议小写+下划线
$sql = "CREATE DATABASE IF NOT EXISTS $dbname";

if(mysqli_query($conn, $sql)) {
    echo "数据库 $dbname 创建成功";
} else {
    echo "创建失败:" . mysqli_error($conn);
}

mysqli_close($conn);
?>

个人经验分享:用面向过程写法时,记得把数据库名单独存变量,后面维护起来方便。我曾经接手过一个项目,建库语句直接写死在SQL里,找了半天才找到改哪里。

方案二:MySQLi面向对象方式

<?php
$host = 'localhost:3306';
$user = 'root';
$pass = '123456';

$mysqli = new mysqli($host, $user, $pass);

if($mysqli->connect_error) {
    die('连接失败:' . $mysqli->connect_error);
}

$dbname = 'codexuexi_db2';
$sql = "CREATE DATABASE IF NOT EXISTS $dbname";

if($mysqli->query($sql)) {
    echo "数据库 $dbname 创建成功";
} else {
    echo "创建失败:" . $mysqli->error;
}

$mysqli->close();
?>

为什么推荐用面向对象?代码结构更清晰,而且链式操作写起来舒服。不过初期学习两个都试试,看哪个顺手。

方案三:PDO方式

PDO的创建逻辑稍微不一样——它不支持在连接字符串里不指定数据库的情况下直接执行CREATE DATABASE。需要先连上mysql系统库,然后用exec()方法执行:

<?php
$host = 'localhost:3306';
$user = 'root';
$pass = '123456';

try {
    // PDO连接必须指定一个默认数据库,这里用mysql系统库
    $pdo = new PDO("mysql:host=$host;dbname=mysql", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    $dbname = 'codexuexi_db3';
    $sql = "CREATE DATABASE IF NOT EXISTS $dbname";
    
    $pdo->exec($sql);
    echo "数据库 $dbname 创建成功";
    
} catch(PDOException $e) {
    echo "创建失败:" . $e->getMessage();
}
?>

注意点:PDO这里的dbname=mysql是指定连接到一个已存在的数据库(系统自带的mysql库),不是我们要创建的那个。这个细节很多新手会踩坑。

本节课程知识要点

要点 说明
执行建库需要什么权限 连接用户必须有CREATE DATABASE权限
数据库名命名规则 允许字母、数字、下划线,不能用数字开头
字符集设置 建库时可以指定:CREATE DATABASE dbname CHARACTER SET utf8mb4
异常处理 实际项目中建议用try-catch配合事务

补充建议

看到网上很多教程上来就推荐PDO,说得好像PDO什么都好。我个人的看法是:如果项目确定只用MySQL,MySQLi够用,代码执行效率还比PDO快一点点。PDO的优势在于数据库迁移——从MySQL换到PostgreSQL或SQLite时,改连接字符串和少数语法就行。

另外提醒一个容易忽略的问题:创建完数据库后,很好单独给这个库建一个用户并授权,别用root账号在业务代码里操作。这是安全底线。

← PHP MySQL数据库连接:从mysqli_connect开始 PHP创建MySQL表的三种方式:告别mysql_query →
分享笔记 (共有 篇笔记)
验证码:
微信公众号