1 连接 Mysql
$conn = new mysqli($servername,$username,$password);
$conn = mysqli_connect($servername,$username,$password);
关闭连接
$conn->close();
mysqli_close($conn);
测试 PHP 的 MySql 数据库的连接
使用函数
parse_ini_file()
解析配置文件config.ini
来获得数据库连接参数,然后使用new
关键字对 mysqli 类进行实例化,最后使用函数mysqli_connect_errno()
来判断是否成功连接上了 MySQL 数据库,实现该过程的代码如下所示
try{
// 解析 config.ini文件
$config = parse_ini_file(realpath(dirname(_FILE_).'/config/config.ini'));
// 对 mysqli类进行实例化
$mysqli = new mysqli($config['host'],$config['username'],$config['password'],$config['dbname']);
if(mysql_connect_errno()){ // 判断是否成功连接上 MySQL 数据库
throw new Exception('数据库连接错误!');
}else{
echo '数据库连接成功 !'; // 打印连接成功的提示
}
}catch(Exception $e){
echo $e-> getMessage();
}
2 创建数据库
CREATE DATABASE
创建数据库
创建一个名为 myDB 的数据库
$sql = "CREATE DATABASE myDB";
注意:当创建一个新的数据库时,必须为 mysqli 对象,指定三个参数 (servername, username,password)
如果使用其他端口(默认 3306),为数据库参数添加空字符串,如
mysqli("localhost","username","password","",port)
补充下 数据库连接 编码问题
// php7
mysqli_query($conn,"set character set 'utf-8'"); // 读库
mysqli_query($conn,"set names 'utf8'"); // 写库
// php5
mysql_query("set character set 'utf8'"); // 读库
mysql_query("set names 'utf8'"); // 写库
3 创建 MySQL 表
一个数据表 有一个唯一名称,并有 行和列 组成
CREATE TABLE
语句,用于创建 MySQL 表
创建表前,我们需要使用 use_myDB 来选择要操作的数据库
use myDB
我们将创建一个名为 “MyGuests” 的表,有 5 个列: “id”, “firstname”, “lastname”, “email” 和 “reg_date”:
CREATE TABLE MyGuests(
id INT(6) UNSIGNED AUTO_INCREAMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)
注意事项:
数据类型可以指定 列 可以存储什么类型的数据,在设置了数据类型后,可以为每个列指定其他选项的属性
- NOT NULL — 每一行都必须含有值(不能为空),null 值是不允许的
- DEFAULT value — 设置默认值
- UNSIGNED — 使用无符号数值类型,0,正数
- AUTO INCREMENT — 设置 MySQL 字段的值在新增记录时 每次自动增长1
- PRIMARY KEY — 设置数据表中每条记录的唯一标识。 通常列的 PRIMARY KEY 设置为 ID数值,与 AUTO_INCREMENT 一起使用
每个表都应该有一个主键(本列为 ‘id’ 列),主键必须包含唯一的值
4 MySQL 插入数据
语法规则:
- PHP 中 SQL 查询语句 必须使用引号
- 在 SQL 查询语句中的 字符串值 必须加 引号
- 数值的值 不需要引号
- NULL 值 不需要引号
INSERT INTO
语句通常用于向 MySQL 表添加新的记录
INSERT INTO table_name(column1,column2,column3,...)
VALUES(value1,value2,value3,...)
向 MyGuests 表中 添加数据
$sql = "INSERT INTO MyGuests(firstname,lastname,email)
VALUES('John','Doe','john@example.com')"
5 插入多条数据
mysqli_multi_query() 函数可以执行多条 SQL 语句
一般使用
$sql = "INSERT INTO MyGuests(firstname,lastname,email)
VALUES('John','Doe','john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";
注意:每个 SQL语句 必须用 分号 隔开
使用 预处理语句
预处理语句及绑定参数,mysql 扩展可以不带数据发送语句或查询到mysql数据库。 可以向列关联或 “绑定” 变量
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检测连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
} else {
$sql = "INSERT INTO MyGuests(firstname, lastname, email) VALUES(?, ?, ?)";
// 为 mysqli_stmt_prepare() 初始化 statement 对象
$stmt = mysqli_stmt_init($conn);
//预处理语句
if (mysqli_stmt_prepare($stmt, $sql)) {
// 绑定参数
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
// 设置参数并执行
$firstname = 'John';
$lastname = 'Doe';
$email = 'john@example.com';
mysqli_stmt_execute($stmt);
$firstname = 'Mary';
$lastname = 'Moe';
$email = 'mary@example.com';
mysqli_stmt_execute($stmt);
$firstname = 'Julie';
$lastname = 'Dooley';
$email = 'julie@example.com';
mysqli_stmt_execute($stmt);
}
}
?>
使用模块化来处理问题,可以通过创建代码块实现更简单的读取和管理
注意参数的绑定,看下 mysqli_stmt_bind_param()
中的代码
mysqli_stmt_bind_params($stmt,'sss',$firstname,$lastname,$email);
该函数绑定参数查询,并将参数传递给数据库。第二个参数是 “sss”。下面的列表展示的参数的类型,s字符告诉 mysql 参数是 字符串
可以是以下 四种参数
- i - 整数
- d - 双精度浮点数
- s - 字符串
- b - 布尔值
6 预处理语句
预处理语句,用于执行多个相同的 SQL语句,并且执行效率更高
预处理:
INSERT INTO MyGuests(firstname,lastname,email) VALUE(?,?,?)
预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests(firstname,lastname,email) VALUES(?,?,?)");
$stmt->bind_param("sss",$firstname,$lastnme,$email);
解析:
? 可以将其替换为 整形,字符串,双精度浮点型和布尔值