1.数据插入简单范例(插入一条数据insert.php)
建好库和表后,就可以往表中插入数据了。建立一个insert.php的文件,复制以下程序到文件中。
执行程序后,在Workbench里就可以看到s008q库中,表addresslist中插入了一条数据,如图5-40所示。
图5-40 插入一条数据
仔细研究前面的建表、插入程序,发现除了SQL语句不一样外,别的地方没有多大的不同。下面详细讲解每条语句的含义。
PDO的英文全称是PHP Data Object,它与MySQL数据连接的语句是这样的:
这条语句建立(实例化)了一个PDO对象,以此实现数据库连接。库类型可以是mysql,也可以是现在流行的很多种数据库mssql、sybase、sqlite、oracle,等等。
这里使用PDO的exec方法设置了字符编码为utf8编码。
这句话用PDO的exec方法执行了插入一条SQL语句,将一个条目插入到表中。
$conn = null;
关闭PDO对象。
简单的几句话就完成了数据库的连接,并插入了一条内容。
2.一次插入多条数据(insert1.php)
将insert语句改为:
可以同时插入多条数据。
3.在插入程序中加入错误判断(insert2.php)
在运行以上程序的时候,初学者难免会有错,我们发现往往有错的时候在浏览器会出现一个白屏,数据库里就是没有我们要插入的内容。这时候,我们特别希望程序能有个报错的功能。
为此,我们对程序进行了完善:
(1)连接数据库对象错误处理方法
PDO采用的是面向对象的方式来实现错误处理的。
所有的程序都放在try{……}当中,通过catch来捕捉错误、打印错误代码和错误信息。这是java等面向对象语言共同的错误异常处理方法。
模式名称:PDO::ATTR_ERRMODE;(www.xing528.com)
模式的值有三种:
PDO::ERRMODE_WARNING是警告;
PDO::ERRMODE_SILENT 为静默;
PDO::ERRMODE_EXCEPTION实现异常抛出异常及处理。
不加这句设置属性的话,相当于设置为PDO::ERRMODE_SILENT(静默),只有执行的方法出错时才会起作用,其他一些错误则不给提示。
在调式程序时,建议将属性设置为PDO::ERRMODE_EXCEPTION,当出错时抛出exceptions 异常,用try catch捕获错误,并输出错误信息:
正式运行的程序有的时候是将错误输出到错误日志中:
(2)执行SQL对象过程错误处理方法
如果不写“$conn->setAttribute(PDO::ATTR_ERRMODE, PDO:: ERRMODE_EXCEPTION );”这句话也可以用以下程序处理错误。
这段是SQL对象执行结果的判断和处理。出错则报错,无错打印一些与插入项目相关的信息。
本范例中与前面的另一个不同是,把原来的常量换成了变量,方便以后用户输入内容传值入库。
到此,对于前面建库、建表中我们不理解的语言全部讲完了。
4.PDO数据库连接程序的完善(预编译过程和方法)
黑客有时会用一个注入的方法向你的数据库中注入垃圾数据,以下的程序可以防止这种黑客的注入。
是个预编译的过程,它返回一个PDOstatement对象。在$SQL中有两个占位符:name、:address未赋值,是通过
$stmt->bindParam(':name', $Name, PDO::PARAM_STR);
$stmt->bindParam(':address', $Address, PDO::PARAM_INT);
给预编译的结果绑定数据的,在绑定过程中设置了参数的数据类型。
这种预处理的思路是把操作的代码与要操作的数据分离开,用PDO->prepare()把操作的代码预编译,然后用预编译后返回的PDOstatement对象的bindParam()绑定数据,用预编译后返回的pdostatement对象的excute()方法来执行代码。
在绑定语句中PDO::PARAM_STR定义的是SQL CHAR、VARCHAR和其他字符串数据类型;
PDO_PARAM_BOOL:定义的是SQL BOOLEAN类型;
PDO_PARAM_INPUT_OUTPUT:参数传递给存储过程中使用此类型,因此,可以在过程执行后修改;
PDO_PARAM_INT:SQL INTEGER数据类型;
PDO_PARAM_NULL:SQL NULL数据类型;
PDO_PARAM_LOB:SQL大对象数据类型;
PDO_PARAM_STMT:PDOStatement对象类型,当前不可操作;
PDO_PARAM_STR:SQL CHAR、VARCHAR和其他字符串数据类型。
通过这一数据绑定过程,实现了防止SQL注入。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。