三、结构化查询语言SQL
3.1 数据定义语言(DDL) 用于定义和管理数据对象,包括数据库,数据表等。例如:CREATE,DROP,ALTER等。 3.2 数据操作语言(DML) 用于操作数据库对象中所包含的数据。例如:INSERT,UPDATE,DELETE语句。 3.3 数据查询语言(DQL) 用于查询数据库对象中所包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询, 并将数据返回客户机中显示。例如:SELETE 3.4 数据控制语言(DCL) 是用来管理数据库的语言,包括管理权限及数据更改。例如:GRANT,REVOKE,COMMIT,ROLLBACK等。四、MySQL 基本操作
4.2 MySQL数据库的连接与关闭 ① 连接(登陆mysql服务器) mysql –h 服务器主机地址 –u 用户名 –p 用户密码 只有客户机所在的主机被授予权限才能去连接MySQL服务器 ② 退出 可以通过\q、exit、ctrl+c或者quit来退出当前客户端 4.3 SQL 命令注意事项: 每个SQL命令都需要使用分号来完成 可以将一行命令拆成多行 可以通过\c来取消本行命令 4.4 我们可以使用help命令来查询快捷键: 将查询后的数据立起来:\G 取消当前未完成的操作:\c 退出当前客户端:\q 显示当前服务器状态:\s 显示帮助信息:\h(同help命令) 更改执行符:\d 4.5 更改root 用户的密码 ① 使用root 登陆 mysql服务区 mysql -u root -p密码 ② 选择mysql数据库 use mysql; ③ 修改 User表中中 root 用户的密码 update user set Password=password('新密码') where User='root'; ④ 更新权限 flush privileges; 4.6 忘记root 密码 ① 关闭mysql服务 ② 使用安全模式 打开mysql服务 mysqld --skip-grant-tables; ③ 使用root用户不用密码登陆 mysql -u root ④ 登陆后 进入mysql数据库 use mysql; ⑤ 更改root密码 update user set Password=password('新密码') where User='root'; ⑥ 更新权限 flush privileges; ⑦ 退出mysql安全模式 mysqladmin -u root -p shutdown ⑧ 重新开启mysql服务五、数据库的操作
查看数据库服务器上的所有数据库 show databases;(带S,一条sql语句结束记得加分号)选择数据库
use 数据库名 如 use test创建一个数据库
create database if not exists 库名;查看当前所在的数据库
select database();删除数据库
drop database if exists 数据库名;六、数据表的操作
查看当前数据库有多少表 show tables;查看一个表的表结构
desc 表名;修改表引擎
alter table 表名字 engine=innodb;查看某个表的建表语句
Show create table 表名;创建表
create table 表名( 字段名 类型 [字段约束(有没有默认 可不可以为空 . . .)], 字段2 类型2 [约束] )engine=innodb default charset=utf8;查看建表语句
Show create table 表名;删除表
drop table 表名;修改表结构(添加字段,修改字段 ,删除字段)
添加字段 alter table 表名 add 字段名 字段类型 字段约束; 字段添加的位置(first 第一列 after 列名 那一列后面)修改字段
①不能修改字段名称 alter table 表名 modify 字段名 字段类型 [类型约束];②修改字段名称
alter table 表名 change 源字段名 新字段名 字段类型 [类型约束];如果表已经存在,添加主键索引
alter table 表名 modify id int primary key auto_increment; 删除主键索引(不能删除自增的) 先把自增去掉 然后删主键 alter table nn drop primary key;唯一索引 : 添加唯一索引后,此列的值不能重复
建表时添加唯一索引 unique在已存在的表上添加唯一索引
格式:alter table 表名 add unique 要添加的唯一索引的名字(在哪一列上) 例子:alter table stu add unique uni_name(name);删除唯一索引
alter table 表名 drop index 唯一索引的名字查看当前表的索引清单
show index from 表名建表时添加常规索引
alter table 表名 add index 常规索引名自己建(在哪一列上)删除常规索引
alter table 表名 drop index 索引名;修改表名
alter table 表名 rename 新的表名;修改自增值 把自增值重置回1
alter table 表名 auto_increment=1;删除字段
Alter table 表名 drop 字段名七、操作数据
添加数据 Insert into 表名(字段名1 ,字段名2,…) values(值1,值2,…..); Insert into 表名 values(值1,值2,值3….) 像这种结构,表有多少字段,就必须赋多少个值插入多条数据
Insert into 表名(字段名1 ,字段名2,…) values(值1,值2,…..), (值1,值2,…..)…..; 插入多条记录的第二种写法 insert into stu values(2,'lisi',1),(3,'wangwu',10);删除数据(跟修改数据记得一定要加条件)
Delete from 表名 where 条件;修改数据
Update 表名 set 字段名=要设置的字段值 where 条件;数据查询
Select 字段1,字段2,…… from 表名;八、数据库类型
1.整型 1.1 tinyint 取值范围: 有符号:-128 ~ 127 无符号:0 ~ 255 作用:可以用于存年龄、标记,比如商品的状态:1新添加,2表示在售中,3已下架;订单状态、性别 tinyint(n) 只有跟zerofill 配合到时候 才生效 如果使用了zerofill 自动把字段用0补全到指定长度 自动转换成无符号1.2 int
取值范围: 有符号:正负二十多个亿 无符号:0~40多个亿 作用:用于计数、时间戳、不能放手机号2.浮点型
float(总位数,小数点后几位) 小数 整数 1.00 小数点后面 如果溢出 , 四舍五入保留3.字符串
char varchar 字符串 (n)代表字符串的长度 char 固定长度 速度快 手机号 身份证 varchar 非固定长度 省空间 用户名 邮箱 姓名 text 长文本 使用于小说、论文 枚举 enum 多选1 安全(类似于单选按钮) 集合 set 多选多 爱好 (类似于复选框)注意:
3.1 字符串的值必须要加引号(单双引号都可以) 3.2 不管是char还是varchar超出指定长度都不行 3.3 char会截取掉后面的空格,而varchar不会 3.4 char(10)或者varchar(10)表示是10个字符,而不是10个字节。存储时实际占用的字节数跟字符集相关。九、列的类型约束(字段)
default 默认值 函数的参数的默认值 auto_increment 字段值自增 ,此约束只能用在主键上 unsigned 无符号 只有正数 , 没有负数 0~255 zerofill 不够的位数用0进行填充 跟数值类型有关 not null 不能插入空值十、索引
1.索引简介 1.1 在MySQL中,主要有四类索引: 主键索引(PRIMARY KEY) 唯一索引(UNIQUE) 常规索引(INDEX) 全文索引(FULLTEXT) 外键(foreign key) 1.2 主键索引 主键索引是关系数据库中最常见的索引类型,主要作用是确定数据表里一条特定的数据记录的位置。 我们可以在字段后添加PRIMARY KEY来对字段设置为主键索引。 注意: 1.最好为每张表指定一个主键,但不是必须指定。 2.一个表只能指定一个主键,而且主键的值不能为空 3.主键可以有多个候选索引(例如NOT NULL,AUTO_INCREMENT) 1.3 唯一索引 唯一索引与主键索引一样,都可以防止创建重复的值。 但是,不同之处在于,每个数据表中只能有一个主键索引,但可以有多个唯一索引。 我们使用关键字UNIQUE对字段定义为唯一索引。 1.4 普通索引(常规索引) 常规索引技术是关系数据查询中最重要的技术, 如果要提升数据库的性能,索引优化是首先应该考虑的,因为它能使我们的数据库得到最大性能方面的提升。 常规索引也存在缺点: 1.多占用磁盘空间 2.会减慢插入,删除和修改操作 3.需要按照索引列上排序格式执行 创建索引我们可以使用INDEX和KEY关键字随表一同创建。 1.5 全文索引 全文索引在MySQL中是一个FULLTEXT类型索引,但FULLTEXT索引只能用于MyISAM表, 并且只可以在CHAR、VARCHAR或TEXT类型的列上创建,也允许创建在一个或多个数据列上。 但是FULLTEXT是不支持中文全文索引的,所以我们将来会使用效率更高的全文索引引擎Sphinx。 2. 查看索引 SHOW INDEXES FROM 表名 3. 创建索引 3.1 建表时 CREATE TABEL 表名( ..... ..... [UNIQUE | INDEX | KEY] [别名] [属性名] ) 3.2 在已存在表上创建索引 CREATE [UNIQUE | FULLTEXT] INDEX 索引名 ON 表名(属性名) 3.3 使用ALTER语句 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT] INDEX 索引名 (属性名) 4. 删除索引 DROP INDEX 索引名 ON 表名十一、MySQL数据类型的选择
1. 整数类型和浮点类型 整型 无小数的数字,数据可能会参与运算 如 id、年龄、时间戳.... 常用的整型: tinyint int tinyint 表示 范围小的数, 比如 年纪、标记... int 表示 范围相对较大的数 比如 时间戳、个数..... 浮点: 有小数点的数字 用浮点 如 价格、金额、长度...... 2. 浮点和定点 2.1 浮点 float 2.2 定点 (双精度)double: 可以表示的分为更大, 精度更高 2.3 浮点可以指定长度: float(6,2); 表示 整数+小数(不算小数点)共6位,其中小数部分2位 插入的数据如果小数过多,会保留指定的位数 如果长度超过了限制, 会使用 指定位数 的最大数 double(6, 2); 3. CHAR和VARCHAR 3.1 char(定长) 取值范围:0~255 定长:char(10)表示固定的占10个字节,哪怕你存的是abc,在存储的时候占的空间也是10个字节 什么时候定长? 手机号、邮编、md5的密码(32) 3.2 varchar(变长) 取值范围:0~65535 变长:varchar(10)表示最大只能存10个字符,但是你存个abc,实际占的字节数是4,因为它需要用1个字节来表示字符串的长度;超出255之后,需要用2位来表示长度,还需要用1个字节来表示是否为null 4. 时间和日期 并不太常用 通常用 时间戳 表示 时间 5. ENUM和SET ENUM (枚举) 多个选项中选择一个 enum('w','m','n') 如:性别 SET 多个选项中选择多个 set('a','b','c','d') 6. TEXT和BLOB TEXT 存储 比较长的字符串 比如 一篇文章,一条新闻 7. 常用的数据类型 整型: int tinyint 浮点: float double 字符串: char varchar text enum十二、存储引擎的选择
1.同一个数据库 可以使用多种存储引擎的表,常用存储引擎的适用环境2.InnoDB
用于事务处理应用程序,具有众多特性,包括ACID事务支持 优点 提供了良好的事务管理、崩溃修复能力和并发控制 缺点 读写效率稍差,占用的数据空间相对比较大3.MyISAM
默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一 优点 占用空间小,处理速度快 缺点 不支持事务的完整性和并发性 Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问 优点 处理速度非常快 缺点 数据易丢失十三、数据备份与还原
1.数据库的备份 1.1 退出mysql环境,进入dos环境 1.2 输入mysqldump -u root -p 要备份的数据库>数据备份的文件名 mysqldump -u root -p lamp143>lamp143.sql 1.3 备份一个数据库 mysqldump -u username -p dbname table1 table2 ... > backupName.sql dbname 表示数据库名 table是表名 没有改参数备份整个数据库 1.4 备份多个数据库 mysqldump -u username -p --database dbname1 dbname2 ... > backupName.sql 1.5 备份全部数据库 mysqldump -u username -p --all-databases > backupName.sql 注意:现在数据库会被备份到C:\Users\Administrator>,如果想将备份后的数据库放到指定的位置,记得先将路径切换到指定的路径2.数据库的还原
2.1 先进mysql环境,创建一个空的数据库,接收一会要导入的数据 2.2 退出mysql环境,进入dos环境 2.3 输入mysql -u root -p 要还原的数据库<数据备份的文件名 mysql -u root -p lamp143<lamp143.sql 注意:要还原的路径要有向还原的数据库文件,如果没有,先将向还原的数据库备份文件考到相应的路径上十四、多表查询
1.两表查询: 1.1 where关联查询 取两个表交集的方法 select * from 表1,表2 where 表1.主键=表2.外键 select * from stu s,grade g where s.id=g.sid;可以建别名1.2 join 连接查询:
left join左联 左联查询就是以左侧表为主查询,右侧表没有的补null select * from 表1 left join 表2 on 表1.主键=表2.外键right join右联
右联联查询就是以右侧表为主查询,左侧表没有的补null select * from 表1 right join 表2 on 表1.主键=表2.外键inner join内联(等价于上面where的结果)交集
select b.id as bid,b.name as bname,s.id as sid,s.name as sname from brand as b inner join shop as s on b.id =s.brand_id;2.三表查询:
2.1 where普通:表1,表2,表3 where 条件2 and 条件2 select c.id as cid,c.name as cname,b.id as bid,b.name as bname,s.id as sid,s.name as sname from class as c,brand as b,shop as s where c.id =b.class_id and b.id=s.brand_id;2.2 左链接: 表1 left join 表2 on 条件 left join 表3 on 条件
select * from class as c left join brand as b on c.id=b.class_id left join shop as s on b.id =s.brand_id;2.3 右连接: 表1 right join 表2 on 条件 right join 表3 on 条件
select * from class as c right join brand as b on c.id=b.class_id right join shop as s on b.id =s.brand_id;2.4 内连接: 表1 inner join 表2 on 条件 inner join 表3 on 条件
select * from class as c inner join brand as b on c.id=b.class_id inner join shop as s on b.id =s.brand_id;十五、MySQL用户管理(设置修改权限都要刷新生效,否则就要重启MySQL服务才可以 flush privileges;且在root下进行添加用户操作和给其它用户加权限)
1.账户管理 1.2 新建普通用户 ①使用INSERT子句新建普通用户 INSERT INTO mysql.user(Host, User, Password) VALUE(主机名, 用户名, PASSWORD(密码)) flush privileges;刷新权限 ②使用GRANT来新建普通用户 GRANT 权限 ON 数据库.数据表 TO 用户名@登录主机 IDENTIFIED BY “密码” 注意:创建完毕之后要刷新 flush privileges; 1.3 删除普通用户 ① 使用DROP USER DROP USER 用户名 ② 使用DELETE语句 DELETE FROM mysql.user WHERE User='' AND Password='' flush privileges;属性权限 1.4 root 用户修改自己的密码 ①使用mysqladmin 命令来修改root 用户的密码 mysqladmin -u 用户名 -p password '新密码' 注意:新密码必须用双引号!! 可能会不成功 ②修改mysql数据库下的user表 UPDATE mysql.user SET Password=password(新密码) WHERE User='' AND Host='' 刷新权限:FLUSH PRIVILEGES ③使用SET语句 SET PASSWORD = PASSWORD(新密码) 刷新权限:FLUSH PRIVILEGES 1.5 root 修改普通用户密码 ①使用set语句 SET PASSWORD FOR 'username'@'hostname'=PASSWORD(新密码) ②修改mysql数据库user表 ③用CRANT 语句 GRANT 权限 ON 数据库.数据表 TO 用户名@登录主机 IDENTIFIED BY “密码” 1.6 普通用户修改密码 ①SET PASSWORD = PASSWORD(新密码) 1.7 root 用户丢失的解决方法 ① 关闭 mysql服务 ② 安全模式 开启mysql服务 mysqld --skip-grant-tables ③ root用户登录mysql服务器 mysql -u root ④ 修改 mysql数据库 下user表 ⑤ 加载权限表 FLUSH PRIVILEGES ⑥ 退出mysql安全模式 mysqladmin -u root -p shutdown 2.权限管理(在root用户进行) 2.1 权限分配(在root用户进行) grant all(赋予权限) on *.* to 用户名 identified by '用户密码'; 权限列表 create 建库建表权限 drop 删库删表权限 insert 数据插入权限 delete 数据删除权限 update 数据修改权限 select 数据读取权限 index 索引操作权限 *.* 数据库 数据表 =>o2o_14.o2o_14.user *代表所有库所有表 分配权限之后:刷新权限 flush privileges;2.2 收回权限(在root下进行)
①revoke select on *.* from 用户名;(需要谨慎) 刷新权限flush privileges; 注意: revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。 Test information_schema数据库和test前缀的数据库不受权限控制 授权完毕之后要刷新权限 flush privileges;2.3 查看权限
①登录当前用户查看当前用户(自己)权限: show grants;②浏览当前MySQL用户信息
select user,host,password from mysql.user;③查看指定用户的权限信息
show grants for xbb(用户名);十六、日志操作(重点)
1.Mysql日志操作可以快速的记录mysql的操作信息 2.打开mysql配置文件,设置日志记录 3.错误日志(在启动或者关闭数据库信息的时候,出现错误,会记录一些日志信息) log-error=/tmp/mysql-error.log 4.查询日志(在执行增删改查的时候,会把日志信息记录) log=/tmp/mysql-query.log 5.慢查询日志 long_query_time=1 log-slow-queries=/tmp/mysql-slow.log 6.二进制日志 log-bin=1十七、数据库PDO
1. 面向对象的错误处理 1.2 结构 try catch try(){ //可能抛出异常的代码 我们在这里尝试执行 }catch{ //如果一旦抓到错误了 就直接跳转到这个区间执行 } 2. 函数简介 2.1 PDO类 ①PDO::exec('执行的 SQL 语句') — 执行一条 SQL 语句,并返回受影响的行数 发送 增、删、改语句 ②public PDOStatement PDO::query( string $statement) 执行查询语句 PDO::query执行一条SQL语句,如果通过,则返回一个PDOStatement对象。PDO::query函数有个"非常好处"就是可以直接遍历这个返回的记录集 ③string lastInsertId ([ string $name = NULL ])获取上一次插入操作产生的ID ④prepare($sql) 创建SQL的预处理,返回PDOStatement对象 ⑤setAttribute() 设置一个"数据库连接对象"属性。 ⑥beginTransaction() 开启一个事物(做一个回滚点) ⑦commit() 提交事务 ⑧rollBack() 事务回滚操作 ⑨errorCode() 获取错误码 ④errorInfo() 获取错误信息,返回数组2.2 PDOStatement 类
①int PDOStatement::rowCount(void);void不用写值 返回上一个由对应的 PDOStatement(预处理)对象执行DELETE、INSERT、或 UPDATE 语句受影响的行数。对于大多数数据库, PDOStatement::rowCount() 不能返回受一条 SELECT 语句影响的行数。替代的方法是,使用 PDO::query()来发出一条和原打算中的SELECT语句有相同条件表达式的 SELECT COUNT(*) 语句,然后用 PDOStatement::fetchColumn()来取得返回的行数。这样应用程序才能正确执行。② public PDOStatement prepare ( string $statement [, array $driver_options = array() ] ) 返回预处理对象 prepare 执行所有sql,可以完全替代 query,exec的功能
③ bool PDOStatement::execute ([ array $input_parameters ] ) — 执行一条预处理语句 成功时返回 TRUE, 或者在失败时返回 FALSE。如果执行SELECT等SQL语句,则还需要借助fetch等函数进行结果读取(当然上文的query也是可使用fetch等函数)
注意:如果是bindParam,bindValue是不需要传参的,是array绑定参数需要传参④、fetch() 返回结果集的下一行,结果指针下移,到头返回false
参数:PDO::FETCH_BOTH (default):索引加关联数组模式 PDO::FETCH_ASSOC、 :关联数组模式 PDO::FETCH_NUM、 :索引数组模式 PDO::FETCH_OBJ、 :对象模式 PDO::FETCH_LAZY :所有模式(SQL语句和对象)⑤fetchAll() 通过一次调用返回所有结果,结果是以数组形式保存
参数:PDO::FETCH_BOTH (default)、//混合数组 PDO::FETCH_ASSOC、//关联 PDO::FETCH_NUM、//索引 PDO::FETCH_OBJ、//对象 PDO::FETCH_COLUMN表示取指定某一列 如:$rslist = $stmt->fetchAll(PDO::FETCH_COLUMN,2);取第三列 ⑥setAttribute() 为一个预处理语句设置属性 ⑦errorCode() 获取错误码 ⑧errorInfo() 获取错误信息 ⑨bindParam() 将参数绑定到相应的查询占位符上 ⑩bindValue() 将一值绑定到对应的一个参数中3.PDO
3.1 什么是PDO? PDO:操作数据库的方法,把操作数据库的方法封装成PDO类 3.2 PDO好处 ①跨数据库管理 a.跨数据库的话,要开相关的PHP数据库扩展,但php7.0默认开启PDO类的mysql 开启与PDO相关的数据库扩展功能 extension=php_pdo_mysql.dll b.添加底层驱动文件 目录: C:\wamp\bin\php\php7.0.4\ext ②支持预处理(防止sql语句注入) ③支持事务操作4.预处理(防止sql语句注入)
4.1 好处: 不需要发送整条sql语句,只需要把发送的值和参数发送过去即可,把sql和值做分离 在发送参数和值的时候,采用的不同的协议,保证数据安全(了解) 预先加载sql语句,只需要查询一次即可查询出所有数据,减少sql语句的分析时间,提高查询效率4.2 ?号式 预处理 防止sql语句注入
a.绑定参数(bindparam) b.绑定值(bindValue) c.绑定数组(只能是索引数组) array()4.3 :别名式 预处理 防止sql语句注入
a.绑定参数(bindparam) b.绑定值(bindValue) c.绑定数组(只能是关联数组)array()5.事务操作
①事务定义? 将多条sql语句作为操作单元,要么都成功,要么都失败②使用事务
a.修改表引擎类型为innodb alter table stu engine=innodb b.查看表引擎类型 show create table stu\G c.开启一次事务: $pdo->beginTransaction(); 提交一次事务: $pdo->commit(); 回滚一次事务: $pdo->rollback();③MyISAM和InnodB的区别?
MyISAM(非事务)增删改速度快 InnodB(事务型)安全性高7.PDOException异常处理类(代表一个由 PDO 产生的错误。在自己的代码不应抛出一个 PDOException 异常。)
参数为void代表无参数 ①final public string Exception::getMessage ( void ) 获取异常消息内容 ②final public string Exception::getFile ( void ) 发生错误文件 ③final public int Exception::getLine ( void ) 发生错误代码行数8.通过PDO的方法来获取PDOStatement对象
8.1 PDO的query(查询sql)方法获取,用于解析结果集 8.2 PDO的prepare(SQL)方法获取,用于处理参数式sql并执行操作9.PDO预处理详解
/*预处理 防止sql语句注入 防止sql语句注入 核心 不需要发送整条sql语句,只需要把发送的值和参数发送过去即可,把sql和值做分离 在发送参数和值的时候,采用的不同的协议,保证数据安全(了解) 注意: 如果id是自增的也要在sql语句也null或者为空字符串''。 ①对于使用命名占位符的预处理语句,应是类似 :name 形式的参数名。值和数据库可以不一致 ②对于使用问号占位符的预处理语句,应是以1开始索引的参数位置。值的内容也要和数据库字段一致*/9.1 问号占位符 (必须是从数字1开始)
//准备sql语句 $sql = "insert into content values(null,?,?)"; $list = $pdo->prepare($sql);//返回PDO预处理对象 var_dump($list)//1.绑定值 bindValue
$list = $pdo->prepare($sql);//返回PDO预处理对象 $list-bindValue(1,'5'); $list->bindValue(1,'苹果man'); $list->bindValue(1,'admins'); $list->execute(); //返回受影响行数 rowCount() echo $list->rowCount();//2.绑定参数 bindParam
$list = $pdo->prepare($sql);//返回PDO预处理对象 $list->bindParam(1,$name); // 赋值 $name = '我是bindParam3'; $list->execute(); //返回受影响行数 rowCount() echo $list->rowCount();//3.绑定数组(只能是索引数组)
$list = $pdo->prepare($sql);//返回PDO预处理对象 $data = array('num',2); $list->execute($data); //返回受影响行数 rowCount() echo $list->rowCount();9.2 命令占位符 :
$sql = "insert into content values('',:content,:tid)"; $list = $pdo->prepare($sql); var_dump($list); //1.绑定参数bindParam() $list->bindParam(":content",$content); $list->bindParam(":tid",$tid); //赋值 $content = "海尔"; $tid = '2'; $list->execute(); echo $list->rowCount();// 2.绑定值bindValue()
$sql = "insert into content values('',:content,:tid)"; $list = $pdo->prepare($sql); $list->bindValue(":content","小米手环2"); $list->bindValue(":tid",'4'); $list->execute(); //返回受影响行数 rowCount() echo $list->rowCount();//3.数组绑定
$sql = "insert into content values('',:content,:tid)"; $list = $pdo->prepare($sql); $arr = array("content"=>"小米6","tid"=>'9'); $list->execute($arr); //返回受影响行数 rowCount() echo $list->rowCount();十八、数据库天龙八部
Step1:链接数据库 mysqli_connect(); 参数:①主机地址 ②mysql用户名 ③mysql密码 ④选择连接的数据库 ⑤端口号 返回:如果连接成功,返回资源类型的标志符号;如果连接失败,返回false。 $link=mysqli_connect("localhost","root","password");Step2:检测数据库连接是否成功?
mysqli_connect_errno()与 mysqli_connect_error() mysqli_connect_errno(); 返回上次连接数据库错误的错误号,连接成功返回0 mysqli_connect_error(); 返回上次连接数据库的错误信息 if(mysqli_connect_errno($conn)){ die("数据库连接失败!失败信息:".mysqli_connect_error($conn)); } 前面两步合并的写法(Step1+Step2):连接数据库同时判断 $conn = mysqli_connect("localhost", "root", "", "mydb") or die("数据库连接失败!失败信息:".mysqli_connect_error($conn));Step3:选择数据库 mysqli_select_db($link,$dbname)
参数:①标识符 ②连接数据库名称 连接成功,返回true;连接失败,返回false 如果修改数据库成功,则资源标识符中的数据库就会发生变动; 如果修改失败而没有通过代码终止操作,则后续代码可以使用原数据库继续执行 mysqli_select_db($conn, "mydb") or die("数据库选择失败!");Step4:设置字符集编码格式
mysqli_set_charset($link,$charset) 只能设置为utf8而不能是utf-8 mysqli_set_charset($conn,"utf8") or die("数据库编码集设置失败!");Step5:编写sql语句
$sql = "select * from tb1";Step6:执行sql语句 mysqli_query($link,$sql);
如果是(DML)增、删、改,将返回布尔类型是否成功 mysqli_affected_rows($link); 返回上一次操作时受影响的行数 mysqli_insert_id($conn); 执行插入语句是返回上次插入最新插入的主键ID如果是(DQL)查询,将返回资源结果集
返回资源结果集中的行数 mysqli_num_rows($result); 返回资源结果集中的字段数 mysqli_num_fields($result); 获得结果集中的所有的记录 mysqli_fetch_all($res); 当前指针指向的那一列的信息 mysqli_fetch_field($res); 返回所有列的信息 mysqli_fetch_fields($res)Step7:解析结果集
var_dump(mysqli_fetch_array($result)); 处理结果集,返回关联数组和索引数组 不常用 参数① 需要处理的结果集 参数② 返回哪种数组格式 MYSQL_ASSOC - 关联数组 MYSQL_NUM - 数字数组 MYSQL_BOTH - 默认。同时产生关联和数字数组Step8:关闭资源与结果集 mysqli_free_result();和mysqli_close();
mysqli_free_result($res); //释放查询资源结果集 mysqli_close($conn); //关闭数据库连接 (一般我们只写这个);检查错误使用的方法:
if (!$result_insert) { printf("Error: %s\n", mysqli_error($conn)); exit(); }如果存在变量的做法?
1.$sql_select="select username from USER where username='".$username."'"; 2.$sql_insert="insert into user(username,userpsd,creattime,creatip)VALUES('".$username."','".$userpsd."','".$time."','".$ip."')";十九、在进行修改页面的时候如何默认显示单选框、复选框、文本框
1.文本框:<textarea name="centent" id="" cols="30" rows="10"><?php echo $row['centent'] ?></textarea> 2.复选框:<input type="checkbox" name='hobby[]' value='吃' <?php echo (in_array('吃',$hobby)?'checked':'') ?>>吃 3.单选框:<label><input type="radio" name='sex' value='w' <?php echo ($row['sex']=='w')?'checked':'' ?>>女</label>