当前位置:首页 > 问答 > 正文

PHP怎么写建库语句,数据库创建那些事儿慢慢说给你听

说到PHP怎么写建库语句,这事儿其实得掰开揉碎了说,咱们得明确一个核心概念:PHP本身并不能直接创建数据库,你可能会觉得奇怪,那这文章不是白看了吗?别急,听我慢慢说。

PHP就像是一个能干的秘书,而数据库(比如MySQL)则是公司里一个规矩特别多的档案部,秘书不能自己凭空变出一个新的档案部来,他必须得拿着老板(也就是你的程序指令)的授权书,按照档案部的规矩,写一份正式的申请函,递交给档案部的负责人,负责人审核通过后,才会建立一个新的档案部。

这个“申请函”,就是SQL语句,而那个“递交”的动作,就是PHP通过某种方式(比如MySQLi或PDO扩展)连接到数据库服务器并执行这个SQL语句的过程,问题的关键就变成了:如何使用PHP去执行一条创建数据库的SQL语句。

(来源:基于PHP与数据库交互的基本原理)

好,现在我们知道了主角是SQL语句,那创建数据库的SQL语句长啥样呢?最简单的是这样的:

PHP怎么写建库语句,数据库创建那些事儿慢慢说给你听

CREATE DATABASE 我的网站数据库;

这条语句告诉数据库服务器:“喂,给我创建一个名字叫‘我的网站数据库’的库。” 在真实世界里,我们不会这么简单粗暴,得有更多的考虑,

  1. 防止重名:如果这个数据库已经存在了,你再执行创建命令,服务器就会报错,你的程序就卡壳了,我们通常会加一个判断:

    CREATE DATABASE IF NOT EXISTS 我的网站数据库;

    这句话就聪明多了,意思是:“我的网站数据库’还不存在,那就创建它;如果已经存在了,就别管了,也别报错,继续往下执行。” 这样我们的程序就更健壮了。

  2. 设置编码:这点超级重要!尤其是如果你的网站要显示中文,如果不设置编码,你数据库里存的中文可能会变成一堆乱码,我们得指定这个数据库用哪种“语言”来存储数据,现在最推荐的就是utf8mb4编码,因为它能支持最全的字符,包括一些emoji表情。

    PHP怎么写建库语句,数据库创建那些事儿慢慢说给你听

    CREATE DATABASE IF NOT EXISTS 我的网站数据库 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

    这条语句就完整多了,它创建数据库,并规定这个库使用utf8mb4编码,排序规则是utf8mb4_unicode_ci(这个排序规则对多语言支持更好)。

(来源:MySQL官方文档关于CREATE DATABASE语句的语法说明)

SQL语句我们准备好了,接下来就是怎么用PHP这个“秘书”把申请函递出去了,这里主要有两种方式:MySQLiPDO,咱们各举一个例子。

使用MySQLi(面向对象方式)

PHP怎么写建库语句,数据库创建那些事儿慢慢说给你听

<?php
// 先连接数据库服务器,注意,这时候还没选择任何一个数据库
$servername = "localhost"; // 服务器地址,一般是localhost
$username = "root";        // 数据库用户名,一般是root
$password = "你的密码";     // 数据库密码
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
// 准备我们上面写好的SQL语句
$sql = "CREATE DATABASE IF NOT EXISTS 我的网站数据库 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci";
// 执行查询
if ($conn->query($sql) === TRUE) {
    echo "数据库创建成功";
} else {
    echo "创建数据库时出错: " . $conn->error;
}
// 关闭连接
$conn->close();
?>

使用PDO方式

PDO的方式更灵活,支持多种数据库。

<?php
$servername = "localhost";
$username = "root";
$password = "你的密码";
try {
    // 同样,先连接服务器,不指定数据库名
    $conn = new PDO("mysql:host=$servername", $username, $password);
    // 设置PDO错误模式为异常,这样出错会抛出异常,方便调试
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "CREATE DATABASE IF NOT EXISTS 我的网站数据库 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci";
    // 使用exec()方法,因为CREATE DATABASE不会返回结果集
    $conn->exec($sql);
    echo "数据库创建成功";
} catch(PDOException $e) {
    echo $sql . "<br>" . $e->getMessage();
}
// 关闭连接
$conn = null;
?>

(来源:PHP官方手册关于MySQLi和PDO的示例)

看到这里,你可能已经发现了,在实际做网站的时候,我们很少会用PHP脚本来动态创建数据库,为什么?因为数据库通常是在网站上线前,由开发者手动创建好的,就好比公司成立之初就把档案部建好了,后续的PHP脚本,都是去连接这个已经存在的数据库,然后对它里面的表进行增删改查操作。

那什么时候会用PHP创建数据库呢?一般是在一些特殊的场景下,

  • 你正在开发一个像WordPress这样的开源程序,它需要让用户在自己服务器上安装,安装过程的第一步就是自动创建数据库。
  • 你做了一个SaaS(软件即服务)平台,每个新用户注册,你都为他单独创建一个数据库来隔离数据。

总结一下今天说的“数据库创建那些事儿”:

  1. PHP不直接建库,而是通过执行SQL语句来间接实现。
  2. 建库的SQL语句要写得周全,考虑是否存在和字符编码。
  3. 通过MySQLi或PDO扩展来连接数据库服务器并执行SQL。
  4. 理解这个知识点很重要,但日常开发中直接使用的频率并不高,更多的是连接现有数据库进行操作。

希望这么一说,你能对PHP创建数据库这事儿有个清晰的认识了。