# mysql数据库操作
>[success]PHP与Mysql可谓是黄金搭档!所以必要熟练掌握相关的知识。虽然说现在PHP的开发大部分都在使用比较成熟的框架,但是掌握原生PHP操作Mysql是十分必要的。
>
## 常见PHP操作Mysql的方式
>[info] PHP连接Mysql的方式,有:mysql、msyqli、pdo
>
>[danger]`mysql`这种方式,目前基本上不使用了。
>
PHP 5 及以上版本建议使用以下方式连接 MySQL :
MySQLi extension ("i" 意为 improved)
PDO (PHP Data Objects)
## `mysqli`操作`Mysql`
>[success]`Mysqli`和`Mysql`在命令格式上基本上和操作上基本一致。
>
>[danger]mysqli的操作上有`面向对象`和`面向过程`两种,不过在使用上都差不多。
### 连接`mysql`数据库
1. 面向对象
~~~
<?php
$servername="127.0.0.1";
$username="root";
$password="HbhRrH666CJH2ciY";
$mydbname="databasename";
// 创建连接
$link=new mysqli($servername,$username,$password,$mydbname);
// 检测连接
if($link->connect_error){
die("连接失败".$link->connect_error);
}
echo "连接成功";
//关闭连接
$conn->close();
?>
~~~
2. 面向过程
~~~
<?php
$servername="127.0.0.1";
$username="root";
$password="HbhRrH666CJH2ciY";
$mydbname="databasename";
// 创建连接
$link=mysqli_connect($servername,$username,$password,$mydbname);
// 检测连接
if(!$link){
die("连接失败".mysqli_connect_error());
}
echo "连接成功";
//关闭连接
mysqli_close($conn);
?>
~~~
>[danger]判断数据库连接成功的方法,除了上述方式外,还可以使用`mysqli_connect_errno() `函数来判断
### 创建数据库
~~~
<?php
// 创建数据库
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "数据库创建成功";
} else {
echo "Error creating database: " . $conn->error;
}
?>
~~~
>[danger]执行sql语句,使用`query`
>
### 创建数据表
~~~
<?php
// 使用 sql 创建数据表
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "创建数据表错误: " . $conn->error;
}
?>
~~~
### 插入数据
~~~
<?php
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
if ($conn->query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
?>
~~~
### 插入多条数据
~~~
<?php
$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')";
if ($conn->multi_query($sql) === TRUE) {
echo "新记录插入成功";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
?>
~~~
### 预处理语句
1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:
~~~
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
~~~
2. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出。
3. 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。
### 相比于直接执行SQL语句,预处理语句有两个主要优点:
1. 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
2. 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
3. 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
~~~
<?php
// 预处理及绑定
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);
// 设置参数并执行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();
$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();
echo "新记录插入成功";
?>
~~~
### 读取数据
~~~
<?php
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 结果";
}
?>
~~~
## PDO操作Mysql数据库
### 连接数据库
~~~
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
echo "连接成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
~~~
### 关闭数据库连接
~~~
<?php
$conn=null;
?>
~~~
### 创建数据
~~~
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE DATABASE myDBPDO";
// 使用 exec() ,因为没有结果返回
$conn->exec($sql);
echo "数据库创建成功<br>";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
~~~
>[danger]PDO执行SQL语使用的:`$conn->exec($sql)`
- 前言
- PHP获取服务器信息
- PHP中的常用函数-新手必备知识
- 日期时间相关的函数
- 时区设置
- time函数
- strtotime 时间戳
- date函数
- mktime函数
- 联合使用 date() 和 mktime()
- PHP数据类型相关的函数
- PHP数组相关的函数
- array函数
- 数组的排序
- sort()和rsort()函数
- asort()和arsort()函数
- ksort()和krsort()函数
- array_multisort()函数
- array_reverse函数
- 数组的遍历
- 数组中新增和删除元素
- 数组头部插入和删除元素
- 数组尾部插入和删除元素
- 删除数组中重复的元素
- 删除数组中指定的元素
- 数组的合并
- 随机/打乱已知数组
- range函数
- 数组去除重复
- PHP常用功能函数
- URL地址处理函数
- post/get请求
- PHP字符串相关的函数
- PHP文件系统
- PHP正则表达式
- 正则表达式语法规则
- POSIX扩展的正则表达式函数
- 查找字串函数
- 替换字符串函数
- Perl兼容的正则表达式函数
- PHP中类的应用
- 中文编码
- 关于stdClass
- 变量相关函数
- unset
- PHP数值相关的函数
- 数值取整
- 开发工具与开发环境使用技巧
- sublime
- 常用插件
- Atom
- 常用插件
- 常见问题
- Visual Studio Code
- vscode常用插件
- 编程推荐字体
- MAC下开发常识
- MAC下的常用设置
- MAC下的常用开发工具
- MAC下XAMMP的常见问题
- Apache配置基础
- PhpStrom
- php中的常见问题
- 文件上传相关问题
- API接口中常见问题
- 关于缓冲区问题
- PHP中注意事项
- 条件判断
- PHP文件管理模块
- 文件管理源码
- 文件管理的常用函数
- 文件管理中文乱码处理
- 自定义功能函数
- 文件下载
- PHP常用头信息定义汇总
- 常见PHP网页木马
- 加密算法
- 1. Base58可逆加密
- 2. AES加密/解密
- mysql数据库操作
- 命令行操作Mysql常用令行-查询
- 命令行操作Mysql常用令行-操作
- Mysql使用中的技巧
- 在线数据库管理中常用命令
- sql show命令
- mysql数据库的备份与恢复
- 二进制日志介绍
- 二进制日志常用命令
- ThinkPHP
- 数据迁移
- 常见问题
- 验证码问题
- API接口中的异常处理
- API接口安全
- 解决跨域问题
- 自定义实用功能函数