# 数据库，与PHP连接

> 网络服务环境都搭建好了，还差与数据库进行交互呢。

[TOC]

----

## MySQL 数据库常用命令

### 前置小“芝士”

| 名词   | 通俗解释                           |
| ------ | ---------------------------------- |
| 数据库 | 就像一个档案夹，里面放着很多的表格 |
| 数据表 | 相当于档案夹里面其中一个表格       |
| 字段   | 相当于 Eexcel 的表头               |
| 主键   | 唯一、不重复的内容                 |

### 远程连接

| 语法    | `mysql -h [host] [-P port] -uroot -p` |
| ------- | ------------------------------------- |
| host    | （必选）远程数据库的 IP 地址          |
| -P port | （可选）远程数据库的端口              |

### 创建数据库

```mysql
CREATE DATABASE 数据库名;
```

### 选择数据库

```mysql
USE 数据库名;
```

### 创建数据表

```mysql
CREATE TABLE IF NOT EXISTS 表名 (
    `id` INT UNSIGNED AUTO_INCREMENT,
    `text` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
```

### 插入数据

```mysql
INSERT INTO 表名 (`id`, `text`)
				VALUES
				(1, '文本');
```

### 查询和查询指定数据

```mysql
SELECT * FROM 表名;
SELECT id,text FROM 表名;
SELECT * FROM 表名 WHERE id=1;
```

### 修改数据表名、数据表字段

```mysql
# 数据表重命名
ALTER TABLE 表名 RENAME TO 修改的表名;
# 删除数据表字段
ALTER TABLE 表名 DROP 字段名;
# 在末尾添加新的字段
ALTER TABLE 表名 ADD 字段名 数据类型(长度);
# 在第一列添加新字段
ALTER TABLE 表名 ADD 字段名 数据类型(长度) FIRST;
# 在某个字段后面添加字段
ALTER TABLE 表名 ADD 字段名 数据类型(长度) AFTER 某字段;
```

### 修改字段名和数据类型

```mysql
ALTER TABLE 表名 MODIFY 字段 新数据类型(长度);
ALTER TABLE 表名 CHANGE 字段 新字段名 新数据类型;
```

### 删除数据库和数据表

```mysql
DROP DATABASE 数据库名;
DROP TABLE 表名;
```

### 删除指定字段的数据记录

```mysql
DELETE FROM 表名 WHERE id=1;
```

完全删除数据记录并清除主键的值，重新由 0 开始

```mysql
TRUNCATE TABLE 表名;
```

### 更新指定数据记录

```mysql
UPDATE 表名 SET 字段=新内容,字段=新内容 WHERE id=1;
```

## SQLite 数据库常用命令

### 创建数据库

```bash
sqlite3 数据库名.db
```

```sqlite
.open 数据库名.db
```

### 创建数据表

```sqlite
CREATE TABLE 表名(
   id INT PRIMARY KEY     NOT NULL,
   text           TEXT    NOT NULL
);
```

### 插入数据

```sqlite
INSERT INTO 表名 (id, text)
				VALUES
				(1, '文本');
```

### 查询和查询指定数据

```mysql
SELECT * FROM 表名;
SELECT id,text FROM 表名;
SELECT * FROM 表名 WHERE id=1;
```

### 删除数据并清空主键记录

```sqlite
DELETE FROM 表名;
UPDATE sqlite_sequence SET seq = 0 WHERE name ='表名';
```

其他语句基本与 MySQL 没有差别。

## PHP与其连接

### 连接 MySQL

```php
$servername = "localhost";
$username = "username";
$password = "password";
$dbName = "databaseName"
 
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbName);

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

$conn->close();
```

### 连接 SQLite

```php
// 把 SQLite3 引用到 MyDB 类中
class MyDB extends SQLite3
{
    // __construct构造函数，对象创建完成后第一个调用方法
    function __construct()
    {
        // 通过 SQLite3 提供的接口API open，打开数据库
        $this->open('test.db');
    }
}

// 实例化 MyDB 类
$db = new MyDB();
if(!$db){
    // lastErrorMsg() 返回最近一次失败的 SQLite 请求的英文描述文本
    echo '连接失败：' . $db->lastErrorMsg();
}
```

