mysql存储过程的返回值在哪里设置_从MySQL存储过程返回值

这篇博客展示了如何简化MySQL的存储过程和PHP之间的交互。通过创建`insert_tag`存储过程,处理标签插入并检查唯一性,配合PHP进行事务处理,确保数据一致性。在遇到重复标签时,存储过程会返回错误信息,而PHP则捕获异常并回滚事务。此示例强调了代码的简洁性和错误处理的重要性。
摘要由CSDN通过智能技术生成

你的存储过程有点过度设计,我喜欢 – 保持简单:)

MySQL的

drop table if exists tags;

create table tags

(

tag_id int unsigned not null auto_increment primary key,

name varchar(255) unique not null

)

engine=innodb;

drop procedure if exists insert_tag;

delimiter #

create procedure insert_tag

(

in p_name varchar(255)

)

proc_main:begin

declare v_tag_id int unsigned default 0;

if exists (select 1 from tags where name = p_name) then

select -1 as tag_id, 'duplicate name' as msg; -- could use multiple out variables...i prefer this

leave proc_main;

end if;

insert into tags (name) values (p_name);

set v_tag_id = last_insert_id();

-- do stuff with v_tag_id...

-- return success

select v_tag_id as tag_id, 'OK' as msg;

end proc_main #

delimiter ;

PHP

ob_start();

try{

$conn = new mysqli("localhost", "foo_dbo", "pass", "foo_db", 3306);

$conn->autocommit(FALSE); // start transaction

// create the tag

$name = 'f00';

$sql = sprintf("call insert_tag('%s')", $conn->real_escape_string($name));

$result = $conn->query($sql);

$row = $result->fetch_array();

$result->close();

$conn->next_result();

$tagID = $row["tag_id"]; // new tag_id returned by sproc

if($tagID < 0) throw new exception($row["msg"]);

$conn->commit();

echo sprintf("tag %d created
refresh me...", $tagID);

}

catch(exception $ex){

ob_clean();

//handle errors and rollback

$conn->rollback();

echo sprintf("oops error - %s
", $ex->getMessage());

}

// finally

$conn->close();

ob_end_flush();

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值