【辅导】Task18 更新与插入删除操作 主要知识点
本任务介绍了4个方面的知识。Task18.1是对参数化查询的回顾也复习,不再讲解,Task18.2-18.4是介绍PHP中实现数据库的修改、插入和删除操作。
1、PHP中数据库CRUD操作的实现
增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)
SQL语句无参数时,通过执行数据库连接对象的query()方法来实现,比如SELECT查询。预处理语句也可以执行无参数SQL语句,不绑定参数变量就可以了。
SQL语句有参数时,可以通过执行预处理语句的execute()方法来实现。参数化查询的SELECT语句,UPDATE、INSERT、DELETE语句一般来说都是有参数的。
2、下拉列表控件的数据绑定
本任务中,使用地址列表来演示了下拉列表控件的数据绑定方式:
以修改为例,客户信息已经读取到$stmt对象(只有一条数据记录),$address_id表示当前客户记录的地址编号。地址信息已经读取到$addr_list对象中,是结果记录集。
对下拉列表控件,需要绑定以下几项数据:
(1)每个option列表项: 可以从$addr_list对象循环读取来绑定:
<?php while ($row=$addr_list->fetch_assoc()):?>
<option>
<?="{$row['address']},{$row['city']},{$row['country']}";?>
</option>
<?php endwhile;?>
(2)需要设定每个选项的value属性值,当用户选择该项时,该值就是表单$_POST['address']的值,对应更新到Customer表的address_id字段。
<option value="<?="{$row['address_id']}";?>"
……
</option>
(3)当前列表的默认选中项,其value值应是当前正在修改的客户的address_id字段的值:
3、参数化查询的实现过程
建立数据库连接对象;
使用SQL语句建立预处理语句;
绑定参数变量 i-integer, d-double, s-string, b-blob
绑定结果变量
给参数变量赋值(如已经赋值可忽略)
执行查询
保存结果
关闭数据库连接
4、修改、插入、删除的实现过程
建立数据库连接对象;
使用SQL语句建立预处理语句;
绑定参数变量 i-integer, d-double, s-string, b-blob
给参数变量赋值(如已经赋值可忽略)
执行查询。
关闭数据库连接
5、关于execute()方法
注意,excute()方法返回true表示SQL语句执行成功,但并表示一定会对表会有实际的影响,如删除时指定了条件,但这个条件不成立,成功执行了删除语句,但实际上一条记录也没有删除。
可以通过数据库连接对象或预处理语句对象的affected_rows属性来获取最近一条SQL语句对结果记录集影响的行数。
excute()方法返回值,经常用来判断SQL语句执行时有没有错,如果有错误,可以通过该对象的error属性来获取SQL语句执行时的错误信息字符串,无错误时error属性值为空串。
6、会使用header()函数吗?
在本任务中,多次使用header()函数实现网页转向,如:
header('Location: Customer.php');
实际上,header()函数用来发送原生的http头部信息。上面的语句就是发送302转向的状态码。
下面的语句,显示404错误:
header("HTTP/1.0 404 Not Found");
下面的程序,强制浏览器显示一个文件下载的对话框:
<?php
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="downloaded.pdf"');
readfile('original.pdf');
?>
下面的程序,将保存在数据库中的blob类型字段内容(照片)输出到浏览器:
header('content-type:image/jpeg');
echo $row["photo"];
7、课后练习
有条件的同学,请务必参照课件和视频,练习下对Customer表的增删改查,针对其它表做练习也可以。