PHP 创建 MySQL 表(Create Table)
在 PHP 中,我们可以使用 MySQLi 或 PDO 连接 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); |
📌 推荐阅读:
更多详细内容请关注其他相关文章!