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 相关文章推荐
杏林同学录(四)
Oct 09 PHP
PHP array 的加法操作代码
Jul 24 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
Sep 29 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
Mar 18 PHP
CI框架常用方法小结
May 17 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 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开发入门教程之面向对象
2006/12/05 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
jquery实现预览提交的表单代码分享
2014/05/21 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
JavaScript冒泡算法原理与实现方法深入理解
2020/06/04 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
python中执行shell的两种方法总结
2017/01/10 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python中使用print输出中文的方法
2018/07/16 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
Python对象转换为json的方法步骤
2019/04/25 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
Django接收自定义http header过程详解
2019/08/23 Python
python安装gdal的两种方法
2019/10/29 Python
Python 执行矩阵与线性代数运算
2020/08/01 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
澳大利亚排名第一的在线酒类商店:MyBottleShop
2018/04/26 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
心理健康心得体会
2014/01/02 职场文书
给医务人员表扬信
2014/01/12 职场文书
司机辞职报告范文
2014/01/20 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
终止合同协议书
2014/04/17 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
回复函格式及范文
2015/07/14 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
django 认证类配置实现
2021/11/11 Python
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers