PHP 创建 MySQL 表(Create Table)
                           
天天向上
发布: 2025-03-22 00:05:08

原创
746 人浏览过

在 PHP 中,我们可以使用 MySQLiPDO 连接 MySQL 并创建数据库表。本教程将全面解析创建 MySQL 表的方式,包括 完整代码示例、常见错误及解决方案,并提供 最佳实践


1. 使用 MySQLi 创建表

1.1 过程化风格(MySQLi Procedural)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database"; // 你要操作的数据库

// 连接 MySQL
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检测连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 创建数据表 SQL
$sql = "CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";

if (mysqli_query($conn, $sql)) {
    echo "数据表 users 创建成功";
} else {
    echo "错误: " . mysqli_error($conn);
}

// 关闭连接
mysqli_close($conn);
?>

📌 解析

  • 连接 MySQL 指定数据库 my_database
  • CREATE TABLE users (...) 定义用户表结构:
  • id:自增主键 (AUTO_INCREMENT PRIMARY KEY)。
  • username:唯一约束 (UNIQUE),不能为空 (NOT NULL)。
  • email:存储用户邮箱,不能重复 (NOT NULL)。
  • password:存储用户密码(建议加密)。
  • created_at:存储用户创建时间,默认当前时间戳 (TIMESTAMP DEFAULT CURRENT_TIMESTAMP)。

1.2 面向对象风格(MySQLi OOP)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检测连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 创建表
$sql = "CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
    echo "数据表 users 创建成功";
} else {
    echo "错误: " . $conn->error;
}

// 关闭连接
$conn->close();
?>

📌 面向对象风格的区别

  • 使用 new mysqli() 创建连接。
  • $conn->query($sql) 执行 SQL 语句。
  • 使用 $conn->error 获取错误信息。

2. 使用 PDO 创建表(推荐)

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

try {
    // 连接 MySQL
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 创建表
    $sql = "CREATE TABLE users (
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,
        email VARCHAR(100) NOT NULL,
        password VARCHAR(255) NOT NULL,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )";

    $pdo->exec($sql);
    echo "数据表 users 创建成功";
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}

// 关闭连接
$pdo = null;
?>

📌 PDO 方式的优势

  • 支持 多种数据库(MySQL、PostgreSQL、SQLite)。
  • 默认开启 异常处理 (PDO::ERRMODE_EXCEPTION),更易调试。
  • 更安全,适用于生产环境。

3. 运行 CREATE TABLE 可能遇到的错误及解决方案

3.1 “No database selected”

错误原因

  • 连接 MySQL 时未指定数据库。

解决方案

  • mysqli_connect()new PDO()指定数据库
  $dbname = "my_database"; 
  mysqli_connect($servername, $username, $password, $dbname);

  new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

3.2 “Table already exists”

错误原因

  • 表已经存在,尝试重复创建。

解决方案

  • 使用 IF NOT EXISTS 避免重复创建:
  $sql = "CREATE TABLE IF NOT EXISTS users (...)";

3.3 “Access denied for user”

错误原因

  • 用户没有权限创建表。

解决方案

  • 赋予权限
  GRANT ALL PRIVILEGES ON my_database.* TO 'root'@'localhost';
  FLUSH PRIVILEGES;
  • 检查用户权限
  SHOW GRANTS FOR 'root'@'localhost';

4. MySQL 数据表管理

操作SQL 语句
显示所有表SHOW TABLES;
查看表结构DESC users;
删除表DROP TABLE users;
修改表ALTER TABLE users ADD COLUMN age INT(3);

📌 推荐阅读

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *