Mysql 基础学习
下图为本篇博文操作的数据表
1.如何连接数据库
在 php5.3 版本之后,想要连接数据库有两种方案,一种是通过 mysqli,另外一种是通过 pdo。如需要了解 pdo 的基础操作可以看我的上一篇博文,本文主要说的是如果通过 mysqli 面向对象的写法操作数据库。
- 在连接数据库之前,需要先通过变量存储好数据库的基本连接信息。
<?php
namespace mysqli_edu;
// 数据库连接配置参数
return [
// 数据库的类型
'type' => $type ?? 'mysql',
// 数据库默认主机
'host' => $host ?? 'localhost',
// 默认数据库
'dbname' => $dbname ?? 'php',
// 默认字符编码集
'charset' => $charset ?? 'utf8',
// 默认端口号
'port' => $port ?? '3306',
// 默认的用户名
'username' => $username ?? 'root',
// 默认的用户密码
'password' => $password ?? 'root123456',
];
- 然后可以将 mysqli 实例化创建一个对象。并且将相关的参数传入。
$mysqli = new mysqli($host, $username, $password, $dbname);
- 然后可以来判断一下是否出现了错误
if ($mysqli->connect_errno) echo $mysqli->connect_error; //可选操作
- 设置客户端默认的字符编码集
$mysqli->set_charset($charset);
- 当然,连接之后需要将连接的数据库关闭
$mysqli_result->free_result();
$mysqli->close();
2. 通过 mysqli 创建数据库
- 通过 mysqli 创建数据库,首先我们需要保证数据库的成功连接
$host = "localhost";
$username = "root";
$password = "";
// 创建连接
$conn = new mysqli($host,$username,$password);
if($conn->connect_error){
die("连接失败,错误:" . $conn->connect_error);
}
- 接下来通过变量保存好 sql 语句
// 设置sql语句
$sql = "create database php_edu default character set = 'utf8' ";
- 连接好数据库之后,我们需要发送 sql 语句并且检验是否数据库创建成功:
// 发送sql语句 并且验证是否创建成功
if($conn->query($sql) === TRUE){
echo "数据库创建成功.";
}else {
echo "数据库创建失败 ,错误信息为:" . $conn->error; // 如果失败输出错误信息
}
- 当然,最后不要忘记关闭数据库
// 关闭数据库
$conn->close();
需要注意的是,如果你使用其他端口(默认为 3306),为数据库参数添加空字符串,如: new mysqli(“localhost”, “username”, “password”, “”, port)
3. 通过 mysqli
创建数据表
- 通过
mysqli
创建数据表首先我们先来完成基本的数据库连接操作,需要注意的是,因为我们是在数据库中创建一个数据表,所以需要在额外的配置一下数据库的信息:
$host = "localhost";
$username = "root";
$password = "";
$dbname = "php_edu"; // 要操作的数据库名
// 创建连接
$conn = new mysqli($host,$username,$password,$dbname); // 第四个参数
if($conn->connect_error){
die("连接失败,错误:" . $conn->connect_error);
}
- 接下来需要设定好创建数据表的 sql 语句
create table php_info(
id int(6) unsigned auto_increment primary key,
firstname varchar(30) not null,
lastname varchar(30) not null,
email varchar(50),
reg_date timestamp
)
- 上述 sql 的一些解释:
NOT NULL - 每一行都必须含有值(不能为空),null 值是不允许的。
DEFAULT value - 设置默认值
UNSIGNED - 使用无符号数值类型,0 及正数
AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1
PRIMARY KEY - 设置数据表中每条记录的唯一标识。 通常列的 PRIMARY KEY 设置为 ID 数值,与 AUTO_INCREMENT 一起使用。
每个表都应该有一个主键(本列为 “id” 列),主键必须包含唯一的值
- 为了执行 sql,可以将上面的 sql 语句存储到一个变量当中:
// 使用sql 创建数据表
$sql = "create table php_info(
id int(6) unsigned auto_increment primary key,
firstname varchar(30) not null,
lastname varchar(30) not null,
email varchar(50),
reg_date timestamp
)";
- 设置完了 sql 语句,可以直接通过 query 方法发送 sql 语句,并且判断是否执行成功
if($conn->query($sql) === TRUE){
echo "数据表创建成功。";
}else {
echo "数据表创建失败,错误信息:" . $conn->error;
}
// 关闭数据库连接
$conn->close();
4. 插入数据
- 如果存储数据的时候出现乱码,那么可以使用下面的代码来解决:
mysqli_set_charset($conn,'utf8'); // 解决乱码问题
<?php
//新增操作
require 'connect.php';
$arr = ['神仙水', '88', '10', '太上老君'];
array_walk($arr, function (&$item, $key) {
$item = "'$item'";
});
$data = implode(', ', $arr);
$sql = "INSERT `business` (`name`,`prices`,`num`,`adminer`) VALUES($data)";
// echo $sql;
// $mysqli数据库连接对象
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功添加了' . $mysqli->affected_rows . '条记录,新添加的主键ID:' . $mysqli->insert_id;
} else {
echo '没有添加记录';
}
} else {
die('添加失败' . $mysqli->errno . ':' . $mysqli->error);
}
// 关闭数据库,可选
//释放结果集占用的内存
// $mysqli_result->free_result();
$mysqli->close();
5. 读取查询数据
<?php
require 'connect.php';
$sql = "SELECT `id`,`name` FROM `business` WHERE `num`>500000";
// $mysqli数据库连接对象
$mysqli_result = $mysqli->query($sql); //sql语句
$mysqli_result->fetch_all();
//指针复位
$mysqli_result->data_seek(0);
// echo $mysqli_result->num_rows;
if ($mysqli_result && $mysqli_result->num_rows > 0) {
$res = $mysqli_result->fetch_all(MYSQLI_ASSOC);
foreach ($res as $re) {
vprintf('<li>编号:%s,名称:%s</li>', $re);
}
} else {
echo '查询失败,或者没有符合条件的记录';
}
// 关闭数据库,可选
//释放结果集占用的内存
$mysqli_result->free_result();
$mysqli->close();
6. 删除数据
- 删除数据时,一定要在 delete from php_edu 后面加 where 条件,否则整个数据表都会被清空
- 删除数据时,一定要在 delete from php_edu 后面加 where 条件,否则整个数据表都会被清空
- 删除数据时,一定要在 delete from php_edu 后面加 where 条件,否则整个数据表都会被清空
<?php
//新增操作
require 'connect.php';
$sql = "DELETE FROM `business` WHERE `id`=" . $_GET['id'];
// echo $sql;
// die;
// $mysqli数据库连接对象
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功删除了' . $mysqli->affected_rows . '条记录';
} else {
echo '没有删除记录';
}
} else {
die('删除失败' . $mysqli->errno . ':' . $mysqli->error);
}
// 关闭数据库,可选
//释放结果集占用的内存
// $mysqli_result->free_result();
$mysqli->close();
7. 更新数据
<?php
//新增操作
require 'connect.php';
$arr = ['name' => '忘泉水', 'adminer' => '玉皇大帝'];
array_walk($arr, function (&$item, $key) {
$item = "`$key`='$item'";
});
$data = implode(', ', $arr);
// echo $data;
// die;
$sql = "UPDATE `business` SET " . $data . " WHERE `id`=14 ";
// echo $sql;
// die;
// $mysqli数据库连接对象
if ($mysqli->query($sql)) {
if ($mysqli->affected_rows > 0) {
echo '成功更新了' . $mysqli->affected_rows . '条记录';
} else {
echo '没有更新记录';
}
} else {
die('更新失败' . $mysqli->errno . ':' . $mysqli->error);
}
// 关闭数据库,可选
//释放结果集占用的内存
// $mysqli_result->free_result();
$mysqli->close();
8. 总结
在上面的代码中,我们尝试了通过 mysqli 对 mysql 数据进行的增删改查操作,其中较为核心的是,sql 语句的使用。下面我们来说一下常用的 sql 语句语法:
- 创建数据库
create database 数据库名 default character set = 'utf8';
- 创建数据表
create table 数据表名 (
-- 下面是表中的一些字段
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)
- 插入数据
insert into table_name (column1, column2, column3,...) values (value1, value2, value3,...)
- 读取数据
select column_name(s) from table_name
如果传入一个*,则表示搜索所有的数据
- 修改数据
update table_name
set column1=value, column2=value2,...
where some_column=some_value
- 删除数据
delete from table_name
where some_column = some_value