PHP调用MySQL存储过程实现用户管理
本教程通过一个用户管理的完整案例,解析PHP如何调用MySQL存储过程。内容涵盖从数据库建表、编写带输入输出参数的存储过程,到使用PHP原生扩展执行调用及结果处理的全流程。
目标与准备
目标是建立一套基于存储过程的用户管理机制(添加、验证、修改密码、删除),并通过PHP进行调用。这将展示如何处理IN(输入)、OUT(输出)以及 INOUT(输入输出)参数。
第1步:准备数据库环境
目的:创建测试用的数据表和基础存储过程结构。
在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)
);
创建存储过程核心逻辑
入口:MySQL命令行或图形化管理工具。
动作:使用 DELIMITER // 自定义结束符,以便在存储过程中使用分号。
重要参数:IN 表示传入参数,OUT 表示传出参数。
第2步:创建用户插入过程 (Insert)
用于向数据库中插入新用户,密码进行MD5加密:
DELIMITER //
CREATE PROCEDURE insertuser(IN username VARCHAR(20), IN userpwd VARCHAR(32))
BEGIN
INSERT INTO user(Name, Pwd) VALUES (username, MD5(userpwd));
END //
第3步:创建用户验证过程 (Validate)
根据用户名查找密码,并通过OUT参数返回,供外部校验:
DELIMITER //
CREATE PROCEDURE validateuser(IN username VARCHAR(20), OUT param1 CHAR(32))
BEGIN
SELECT Pwd INTO param1 FROM user WHERE Name=username;
END //
第4步:创建密码修改与用户删除过程
密码修改:
DELIMITER //
CREATE PROCEDURE modifyPwd(IN username VARCHAR(20), IN userpwd VARCHAR(32))
BEGIN
UPDATE user SET Pwd=MD5(userpwd) WHERE Name=username;
END //
用户删除:
DELIMITER //
CREATE PROCEDURE deleteuser(IN username VARCHAR(20))
BEGIN
DELETE FROM user WHERE Name=username;
END //
PHP调用存储过程实施
入口:PHP脚本文件。
动作:连接数据库并使用 mysql_query() 执行 CALL 语句。
注意:以下代码使用已废弃的 mysql_* 函数,仅作原理演示。
<?php
// 1. 连接与选择库
if (!mysql_connect("localhost", "root", "")) {
echo "连接数据库失败";
}
if (!mysql_select_db("test_db")) { // 请替换为实际数据库名
echo "选择数据库失败<br>";
}
// 2. 添加用户
$in_user = array("testuser", "password123");
$sql_ins = sprintf("CALL insertuser('%s', '%s')",
mysql_real_escape_string($in_user[0]),
mysql_real_escape_string($in_user[1])
);
if (mysql_query($sql_ins)) {
echo "添加用户成功<br>";
} else {
echo "添加用户失败<br>";
}
// 3. 验证用户 (利用变量接收OUT参数)
$sql_val = sprintf("CALL validateuser('%s', @a)",
mysql_real_escape_string($in_user[0])
);
mysql_query($sql_val);
$result_pwd = mysql_fetch_array(mysql_query("SELECT @a"));
$db_hash = $result_pwd[0];
$pass_hash = md5($in_user[1]);
if ($db_hash === $pass_hash) {
echo "用户验证正确<br>";
} else {
echo "用户验证错误<br>";
}
// 4. 修改密码
$mod_user = array("testuser", "newpass");
$sql_mod = sprintf("CALL modifyPwd('%s', '%s')",
mysql_real_escape_string($mod_user[0]),
mysql_real_escape_string($mod_user[1])
);
if (mysql_query($sql_mod)) {
echo "密码修改成功<br>";
}
// 5. 删除用户
$sql_del = sprintf("CALL deleteuser('%s')",
mysql_real_escape_string($mod_user[0])
);
if (mysql_query($sql_del)) {
echo "用户删除成功<br>";
}
?>
完成判断与注意事项
当控制台输出了操作结果且对应的数据库记录发生变化时,即视为调用成功。
- 安全性:生产环境中请务必使用PDO或Mysqli扩展,原生
mysql扩展已在PHP 7中被移除且极易遭受SQL注入攻击。 - 性能考量:虽然存储过程减少了客户端与服务端的数据传输量,但增加了数据库服务器的运算压力。对于简单的CRUD操作,直接SQL效率更高;对于复杂的业务逻辑,存储过程更具优势。
以上就是PHP调用MySQL存储过程实现用户管理的详细内容,更多关于PHP数据库操作及后端安全的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









