前言
可参考文档:
https://www.runoob.com/php/php-mysql-intro.html
本文使用的是PHP7.3版本。
面向对象/面向过程/PDO
最先有的是面向过程的方式,后来学习其他语言添加的面向对象,而PDO是面向对象方式对所有数据库的一种封装。
PDO是PHP数据对象,PHP Data Object的缩写。
统一API能操作各种数据库,这样切换数据库不用修改代码了。
MySQLi和PDO API是在MySQL 4.1版本之后引入的,因此只有MySQL 5.0及以上版本才支持这两种API。而PHP7对MySQLi和PDO API的支持是基于这两种API的实现的,因此只有MySQL 5.5及以上版本的API才能与PHP7兼容。
结论
推荐使用PDO。
PDO方式
查询列表
1  | 
  | 
插入单条数据
1  | 
  | 
插入多条数据
1  | 
  | 
插入数据-预处理
1  | 
  | 
删除数据
1  | 
  | 
更新数据
1  | 
  | 
兼容MySQL8
mysql8默认php pdo无法连接问题
会报两个错误
错误1
PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to the developers
错误2
PDO::__construct(): The server requested authentication method unknown to the client
错误1的原因是编码不支持
错误2的原因是mysql8默认的使用密码认证方式不一样
mysql8.0默认使用caching_sha2_password,但是之前版本都是使用mysql_native_password。
查询
1  | select user,host,plugin from mysql.user;  | 
结果:
 
现在我们要改写mysql的默认密码认证方式。
改配置
/etc/mysql/my.cnf
1  | [client]  | 
重启mysql
1  | service mysqld restart  | 
改密码
1  | ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY'root';  | 
重启mysql
1  | service mysqld restart  | 
面向对象方式
创建数据库
1  | 
  | 
创建表
1  | 
  | 
查询列表
1  | 
  | 
插入单条数据
1  | 
  | 
插入多条数据
1  | 
  | 
插入数据-预处理
1  | 
  | 
接下来,让我们来看下 bind_param() 函数:
1  | $stmt->bind_param("si", $name, $age);  | 
该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "si" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。
参数有以下四种类型:
- i - integer(整型)
 - d - double(双精度浮点型)
 - s - string(字符串)
 - b - BLOB(binary large object:二进制大对象)
 
每个参数都需要指定类型。
删除数据
1  | 
  | 
更新数据
1  | 
  | 
面向过程
查询列表
1  | 
  |