php调用mysql存储过程实例分析

本文实例分析了php调用mysql存储过程的方法。分享给大家供大家参考。具体分析如下:

Mysql存储过程创建语法,代码如下:

CREATE PROCEDURE和CREATE FUNCTION :

代码如下:

CREATE PROCEDURE sp_name ([proc_parameter[,...]])
 
    [characteristic ...] routine_body
 
CREATE FUNCTION sp_name ([func_parameter[,...]])
 
    RETURNS type
 
    [characteristic ...] routine_body
 
    proc_parameter:
 
    [ IN | OUT | INOUT ] param_name type
 
    func_parameter:
 
    param_name type
 
type:
 
    Any valid MySQL data type
 
characteristic:
 
    LANGUAGE SQL
 
  | [NOT] DETERMINISTIC
 
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
 
  | SQL SECURITY { DEFINER | INVOKER }
 
  | COMMENT 'string'
 
routine_body:
 
    Valid SQL procedure statement or statements

当我们看完以后,就可以开始写一些简单的存储过程了,首先建立存储过程, Create procedure(子程序)、Create function(函数),代码如下:

代码如下:

Create procedure sp_Name ([proc_parameter ])
routine_body

这里的参数类型可以是 IN OUT INOUTT,意思和单词的意思是一样的,IN 表示是传进来的参数,OUT 是表示传出去的参数,INOUT 是表示传进来但最终传回的参数,代码如下:

代码如下:

Create functionsp_Name ([func_parameter ])
Returns type
Routine_body

Returns type 指定了返回的类型,这里给定的类型与返回值的类型要是一样的,否则会报错,下面是一个简单的例子,代码如下:

代码如下:

mysql> delimiter //
mysql> create procedure g
    -> begin
    -> select version() i
    -> end
    -> //
Query OK, 0 rows affected
 
mysql> call getversion(@a
    -> //
Query OK, 0 rows affected
 
mysql> select @a;
    -> //
+---------------------+
| @a                  |
+---------------------+
| 5.0.45-community-nt |
+---------------------+
1 row in set (0.05 sec)

一个获取当前mysql版本的存储过程.那么php怎么与mysql的存储过程相结合呢.以下来自百度知道,代码如下:

代码如下:

Drop table if exists user;  
    Create table user(  
        Id int unsigned not null auto_increment,  
        Name varchar(20) not null,  
        Pwd char(32) not null,  
        Primary key(Id)  
);

添加用户的存储过程,代码如下:

代码如下:

Delimiter //  
    Create procedure insertuser(in username varchar(20),in userpwd varchar(32))  
    Begin  
        Insert into welefen.user(Name,Pwd) values (username,md5(userpwd));  
    End  
    //

验证用户的存储过程,代码如下:

代码如下:

Delimiter //  
    Create procedure validateuser(in username varchar(20),out param1)  
    Begin   
        Select Pwd into param1 from welefen.user where Name=username;  
    End  
    //

修改密码的存储过程,代码如下:

代码如下:

Delimiter //  
    Create procedure modifyPwd(in username varchar(20),in userpwd varchar(32))  
    Begin  
        Update welefen.user set Pwd=md5(userpwd) where Name=username;  
    End  
    //

删除用户的存储过程,代码如下:

代码如下:

Delimiter //  
    Create procedure deleteuser(in username varchar(20)) 
Begin  
         delete from welefen.user where Name=username;  
    End  
    //

在客户端,我们给出如下的程序,代码如下:

代码如下:

<?php  
     if (!mysql_connect("localhost","root","welefen")){   
         echo "连接数据库失败";  
    }  
     if (!mysql_select_db("welefen")){  
         echo "选择数据库表失败<br>";  
    }  
      
    $insert_user=array("welefen","welefen");//这里的welefen分别为用户名、密码  
     if (mysql_query("call insertuser('$insert_user[0]','$insert_user[1]')")){  
         echo "添加用户$insert_user[0]成功<br>";  
    }else {  
         echo "添加用户$insert_user[0]失败<br>";  
    }  
      
    $validate_user=array("welefen","welefen");//这里的welefen分别为用户名、密码  
    mysql_query("call validateuser('$validate_user[0]',@a)");  
    $Pwd=mysql_query("select @a");  
    $result=mysql_fetch_array($Pwd);  
     if ($result[0]==md5($validate_user[1])){  
         echo "用户$validate_user[0]验证正确<br>";  
    }else {  
         echo "用户$validate_user[0]验证错误<br>";  
    }  
      
    $modify_Pwd=array("welefen","weilefeng"); //welefen为用户名weilefeng为新密码  
     if (mysql_query("call modifyPwd('$modify_Pwd[0]','$modify_Pwd[1]')")){ 
         echo "用户$modigy_Pwd[0]的密码修改成功<br>";  
    }else {
         echo "用户$modigy_Pwd[0]的密码修改失败<br>";  
    }  
      
    $delete_user=array("welefen");           //welefen为用户名  
     if (mysql_query("call deleteuser('$delete_user[0]')")){  
         echo "用户$delete_user[0]删除成功<br>";  
    }else {  
         echo "用户$delete_user[0]删除失败<br>";  
    }  
?>

这样就完成了,php调用mysql的存储过程,其实这些简单的应用,就用不上存储过程了,实际的应用是比这个复杂的多,可以看出,建立了mysql的存储过程可以极大的减少了客服端的压力,但是增加了数据库服务的压力,各种利弊得实际去衡量.

希望本文所述对大家的php程序设计有所帮助。

(0)

相关推荐

  • Node.js中调用mysql存储过程示例

    例子仅在windows下测试通过,没有放在linux下测试.如有问题,可以电邮给我~ 1.安装node.js.mysql,此处略(自行搜索吧)-: 2.创建一个名为test的数据库,然后建一张名为user_info的表(仅供测试)- 这里假定mysql使用的用户名为root,密码为123456 相应的mysql如下: 复制代码 代码如下: /** * 创建名为test的数据库 */ DROP DATABASE IF EXISTS test; CREATE DATABASE test; USE t

  • python连接mysql调用存储过程示例

    复制代码 代码如下: #!/usr/bin/env python# -*- coding: utf8 -*-import MySQLdbimport timeimport os, sys, stringdef CallProc(id,onlinetime):'''调用存储过程,输入参数:编号,在线时间,输出:帐号,密码;使用输出参数方式'''accname=''accpwd=''conn = MySQLdb.connect(host='localhost',user='root',passwd=

  • PHP调用MySQL存储过程并返回值的方法

    本文实例讲述了php中调用执行mysql存储过程然后返回由存储过程返回的值,分享给大家供大家参考.具体分析如下: 调用存储过程的方法. a.如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,一个php变量,也可以不必,只是没有php变量时,没有办法进行动态输入,一个Mysql变量. b.如果存储过程有OUT变量,声明一个Mysql变量,mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句,入set @mysql

  • MySql学习心得之存储过程

    先来看段mysql查询文章回复语句: 复制代码 代码如下: #查询文章回复-- ------------------------------ Procedure structure for `sp_select_reply_article`-- ----------------------------DROP PROCEDURE IF EXISTS `sp_select_reply_article`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PR

  • MySql存储过程学习知识小结

    什么是存储过程: 存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了. 存储过程的好处: 1.由于数据库执行动作时,是先编译后执行的.然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高. 2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率. 3.通过存储过程能够使没有权限的

  • Mysql存储过程和函数区别介绍

    存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表. 存储过程和函数存在以下几个区别: 1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强.存储过程,功能强大,可以执行包括修改表等一系列数据库操作:用户定义函数不能用于执行一组修改全局数据库状态的操作. 2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象.函数只能返回一个变量:而存

  • MySQL 存储过程中执行动态SQL语句的方法

    drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500); set my_sqll='select * from aa_list'; set @ms=my_sqll; PREPARE s1 from @ms; EXECUTE s1; deallocate prepare s1; end;

  • mysql存储过程实现split示例

    复制代码 代码如下: call PROCEDURE_split('分享,代码,片段',',');select * from splittable; 复制代码 代码如下: drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`(    inputstring varchar(1000),    delim char(1))begin    declare strlen int DEFAULT lengt

  • MySQL存储过程中游标循环的跳出和继续操作示例

    最近遇到这样的问题,在MySQL的存储过程中,游标操作时,需要执行一个conitnue的操作.众所周知,MySQL中的游标循环操作常用的有三种,LOOP,REPEAT,WHILE.三种循环,方式大同小异.以前从没用过,所以记下来,方便以后查阅. 1.REPEAT 复制代码 代码如下: REPEAT     Statements;   UNTIL expression END REPEAT demo DECLARE num INT; DECLARE my_string  VARCHAR(255);

  • Mysql存储过程循环内嵌套使用游标示例代码

    BEGIN -- 声明变量 DECLARE v_addtime_begin varchar(13); DECLARE v_addtime_end varchar(13); DECLARE v_borrow_id int; DECLARE v_count int; DECLARE s1 int; /** 声明游标,并将查询结果存到游标中 **/ DECLARE c_borrow CURSOR FOR SELECT ID from rocky_borrow WHERE BORROWTYPE = 2

随机推荐