前言
可参考文档:
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 |
|