PDO中存储过程允许在更接近于数据的位置操作数据,从而减少带宽的使用,它们使数据独立于脚本逻辑,允许使用不同语言的多个系统以相同的方式访问数据,从而节省了花费在编码和调试上的宝贵时间,同时他使用预定义的方案执行操作,提高查询速度,并且能阻止与数据的直接相互作用,从而起到保护数据的作用!
上一篇文章《PDO中的事务处理具体介绍》中,我们介绍了关于PDO的事务处理,那么我们这篇文章给大家介绍PDO中的存储过程!大理石构件维修
首先来讲解如何在PDO中调用存储过程,这里先创建一个存储过程,其SQL语句如下:
1
2
3
4
5
6
7
|
drop procedure if exists pro_reg;
delimiter//
create procedure pro_reg( in nc varchar (80), in pwd varchar (80), in email varchar (80), in address varchar (50))
begin
insert into tb_reg( name ,pwd,email,address) values (nc,pwd,email,address);
end ;
//
|
“drop”语句删除MySQL服务器中已经存在的存储过程pro_reg。
“delimiter//”的作用是将语句结束符更以为“//”。
“in nc varchar(80).......in address varchar(50)”表示要向存储过程中传入的参数。
“begin......end”表示存储过程中的语句块,它的作用类似与PHP语言中的“{.......}”。
存储过程创建成功后,下面调用存储过程,实现用户注册信息的添加操作,具体步骤如下。
创建index.php文件。首先,创建form表单,将用户信息通过POST方法提交到本页。然后,在本页中编写PHP脚本,通过PDO连接MySQL数据库,并且设置数据库编码格式为UTF-8,获取表单中提交的用户注册信息。接着,通过call语句调用存储过程pro_reg,将用户注册信息添加到数据表中。最后,通过try...catch...语句块返回错误信息。关键代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<form name= "form1" action= "4.php" method= "post" >
用户昵称:<input type= "text" name= "nc" ><br>
密 码:<input type= "password" name= "password" ><br>
邮 箱:<input type= "text" name= "email" ><br>
<input type= "submit" name= "Submit" value= "注册" >
<input type= "submit" name= "Submit" value= "重写" >
</form>
<?php
if ( $_POST [ "Submit" ]){
header( "Content-Type:text/html; charset=utf-8" );
$dbms = "mysql" ;
$dbName = "php_cn" ;
$user = "root" ;
$pwd = "root" ;
$host = "localhost" ;
$dsn = "$dbms:host=$host;dbname=$dbName" ;
try {
$pdo = new PDO( $dsn , $user , $pwd );
$pdo ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$nc = $_POST [ 'nc' ];
$password = md5( $_POST [ 'password' ]);
$email = $_POST [ 'email' ];
$query = "call pro_reg('$nc','$password','$email')" ;
$res = $pdo ->prepare( $query );
if ( $res ->execute()) {
echo "添加数据库成功" ;
} else {
echo "添加数据库失败" ;
}
} catch (PDOException $e ){
echo "PDO Exception Caught" ;
echo 'Error with the database:<br>' ;
echo 'SQL Query;' . $query ;
echo '<pre>' ;
echo "Error:" . $e -> getMessage(). "<br>" ;
echo "Code:" . $e ->getCode(). "<br>" ;
echo "File:" . $e ->getFile(). "<br>" ;
echo "Line:" . $e ->getLine(). "<br>" ;
echo "Trace:" . $e ->getTraceAsString(). "<br>" ;
echo "</pre>" ;
}
}
|