PHP调用存储过程返回值不一致问题的解决方法分析


Posted in PHP onApril 26, 2016

本文实例讲述了PHP调用存储过程返回值不一致问题的解决方法。分享给大家供大家参考,具体如下:

今天遇一个同学聊存储过程返回值经常得到意外的值为null, 因为白天有事,晚上给做一个实验放在这里供有相应问题的同学查看一下。

存储过程:

delimiter//
createprocedureusp_s2(outpar1int)
begin
selectinet_ntoa(ip),portfromproxy_listlimit5;
selectcount(*)intopar1fromproxy_list;
END//
delimiter;

session 1执行:

mysql>callusp_s2(@a);
+—————+——+
|inet_ntoa(ip)|port|
+—————+——+
|1.34.21.86  |8088|
|1.34.59.50  |8088|
|1.34.69.15  |8088|
|1.34.73.110  |8088|
|1.34.76.218  |8088|
+—————+——+
5rowsinset(0.00sec)
QueryOK,1rowaffected(0.01sec)
mysql>select@a;
+——+
|@a  |
+——+
|4430|
+——+
1rowinset(0.00sec)

session 2执行:

mysql>select@a;
+——+
|@a  |
+——+
|NULL|
+——+
1rowinset(0.00sec)

可见两个session得到的结果不一致。 基本可以肯定两次调用落入不同的会话中会得到不同的值。
为了一致可以如用如下调用:

<?php
$hostname="127.0.0.1";
$username="wubx";
$password="wubxwubx";
$database="proxydb";
$db=newmysqli($hostname,$username,$password,$database);
if(mysqli_connect_errno()){
    printf("Connect failed: %s\n",mysqli_connect_error());
    exit();
}
$result=$db->multi_query("call usp_s2(@total); select @total;");
if($result){
    do{
    if($r=$db->store_result()){
        if($r->field_count==2){
            while($row=$r->fetch_row()){
                print"ip: $row[0], port: $row[1]\n";
            }
        }else{
            $row =$r->fetch_row();
            print"total: $row[0]\n";
        }
    }
    }while($db->next_result());
}
$db->close();
?>

$phpt_proc_return.php
ip:1.34.21.86,port:8088
ip:1.34.59.50,port:8088
ip:1.34.69.15,port:8088
ip:1.34.73.110,port:8088
ip:1.34.76.218,port:8088
total:4430

Good luck.

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

PHP 相关文章推荐
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
PHP获取数组中单列值的方法
Jun 10 PHP
Laravel中的chunk组块结果集处理与注意问题
Aug 15 PHP
PHP获取远程http或ftp文件的md5值的方法
Apr 15 PHP
PHP抓取及分析网页的方法详解
Apr 26 #PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 #PHP
基于PHP实现通过照片获取ip地址
Apr 26 #PHP
各种快递查询--Api接口
Apr 26 #PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 #PHP
Yii2增加验证码步骤详解
Apr 25 #PHP
Yii实现显示静态页的方法
Apr 25 #PHP
You might like
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
javascript滚轮事件基础实例讲解(37)
2017/02/14 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
Vue的状态管理vuex使用方法详解
2020/02/05 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
python线程锁(thread)学习示例
2013/12/04 Python
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
python绘制动态曲线教程
2020/02/24 Python
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
物业管理员岗位职责范文
2013/11/25 职场文书
先进个人事迹材料
2014/01/25 职场文书
出生公证书样本
2014/04/04 职场文书
假面舞会策划方案
2014/05/29 职场文书
学风建设演讲稿
2014/09/12 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python