19.8 PDO中存储过程

19.8 PDO中存储过程

存储过程允许在更接近于数据的位置操作数据,从而减少带宽的使用,它们使数据独立于脚本逻辑,允许使用不同语言的多个系统以相同的方式访问数据,从而节省花费在编码和调试上的宝贵时间。同时它使用预定义的方案执行操作,提高查询速度,并且能够阻止与数据的直接相互作用,从而起到保护数据的作用。

下面讲解如何在PDO中调用存储过程。这里首先创建一个存储过程,其SQL语句如下:

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(50)…in address varchar(50)”表示要向存储过程中传入的参数。

“begin…end”表示存储过程中的语句块,它的作用类似与PHP语言中的“{…}”。

存储过程创建成功后,就可以调用这个存储过程实现用户注册的功能。在PDO中通过call语句调用存储过程,实现用户注册信息的添加操作。

【例19.10】创建index.php文件。首先,创建form表单,将用户注册信息通过POST方法提交到本页。然后,在本页中编写PHP脚本,通过PDO连接MySQL数据库,并且设置数据库编码格式为utf8,获取表单中提交的用户注册信息。接着,通过call语句调用存储过程pro_reg,将用户注册信息添加到数据表中。最后,通过try{…}catch{…}语句块返回错误信息。其关键代码如下:(实例位置:光盘TMsl1910)

<?php if(isset($_POST['submit']) && $_POST['submit']! =""){ $dbms='mysql'; //数据库类型,对于开发者来说,使用不同的数据库,只要改这个,不用记住那么多的函数 $host='localhost'; //数据库主机名 $dbName='db_database19'; //使用的数据库 $user='root'; //数据库连接用户名 $pass='111'; //对应的密码 $dsn="$dbms:host=$host; dbname=$dbName"; try { $pdo=new PDO($dsn, $user, $pass); //初始化一个PDO对象,就是创建了数据库连接对象$pdo $pdo->query("set names utf8"); //设置数据库编码格式 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //定义错误异常模式 $nc=$_POST['nc']; $pwd=md5($_POST['pwd']); $email=$_POST['email']; $address=$_POST['address']; $query="call pro_reg('$nc', '$pwd', '$email', '$address')"; $result=$pdo->prepare($query); if($result->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>'; } } ?>

运行结果如图19.12所示。

图19.12 通过存储过程完成用户的注册

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

19.8 PDO中存储过程